Go教程技术文章
-
Go fuzzing 的种子语料既可以来自 f.Add,也可以来自 testdata/fuzz/FuzzTestName 目录。本文给出按 Fuzz 目标拆分目录、区分样本用途并纳入安全审计的组织方法。274 收藏 -
从真实 time.Sleep 迁移到 Go testing/synctest:用 bubble、虚拟时间和 Wait 稳定并发测试,并梳理网络 I/O 与资源清理边界。252 收藏 -
testing/synctest 判断 channel 是否阻塞,关键不在于看到某个 goroutine 停住,而在于它是否只能被同一 bubble 内的事件唤醒。本文从 channel 来源、synctest.Wait 到 nil channel 和外部 I/O,整理一套可操作的判断方法。182 收藏 -
testing/synctest 用 bubble 隔离 goroutine,并把 time 包切换到虚拟时钟。本文从超时测试出发,说明 Test、Wait、资源清理和外部 I/O 的边界。165 收藏 -
testing.B.Loop 解决了串行基准的计时和编译器优化陷阱,但并行基准仍要通过 RunParallel 与 PB.Next 分配工作。本文拆开两种语义,说明如何读取 ns/op、b.N、GOMAXPROCS 和 SetParallelism。122 收藏 -
解释 Go 1.24 的 testing.B.Loop 如何自动划定基准计时边界,把初始化和清理排除在循环体耗时之外,并对比传统 b.N 写法的迁移注意事项。273 收藏 -
Golang · Go教程 | 2星期前 | 单元测试 · Context · Go教程 · HTTP客户端 · Go 上下文取消 HTTP测试 testing.T.Context http.NewRequestWithContext
Go 1.24 起,testing.T.Context 能把测试生命周期直接传给 HTTP 客户端请求。本文给出最小代码、超时收紧、子测试边界,并解释它与 httptest.NewRequestWithContext 的区别。413 收藏 -
讲清 Go testing.T.Context 与 Cleanup 的取消时序,演示后台 goroutine 如何通过 done 和 errCh 退出,并在 Cleanup 中安全完成并发断言。262 收藏 -
Go 1.24 的 testing.T.Context 会在 Cleanup 回调执行前取消。本文用后台 worker 示例说明如何传递测试上下文、等待 goroutine 退出,以及父子测试、超时和清理阶段的生命周期边界。380 收藏 -
用 maps.EqualFunc 比较不同值类型的 Go map,讲清键类型约束、eq 回调、string 与 []byte 转换、缺键和性能边界。249 收藏 -
maps.Clone 只复制 map 的第一层键和值。本文用切片、map、指针和结构体示例拆开嵌套引用边界,并给出需要独立状态时的深复制写法与检查清单。306 收藏 -
maps.All 返回绑定原映射的惰性迭代器,并不会在创建时复制数据。本文从修改时点、迭代中变更和并发边界说明真实语义,并给出 maps.Clone 与有序快照写法。445 收藏 -
slices.SortedFunc 会收集迭代器并按自定义比较函数排序,但不保证同键元素的原始顺序。本文通过订单案例解释 SortedStableFunc、显式次级键、map 输入顺序与严格弱序比较器的选择。236 收藏 -
slices.Collect 会把惰性 iter.Seq 完整物化为新切片,并从 nil 切片逐项 append。本文给出槽位、引用载荷与扩容峰值的估算方法,以及已知数量时用 AppendSeq 预分配、数量未知时限量或流式处理的写法。180 收藏 -
讲清 Go slices.Chunk 的固定大小切分、底层数组别名、cap 裁剪、append 行为,以及何时应该用 slices.Clone 保存独立批次。234 收藏