Go语言技术文章
-
Go Modules 的 replace 可以在不修改 import 路径的情况下,把依赖临时切换到相邻目录中的本地分支。本文说明 require 与 replace 的关系、如何确认实际来源,以及测试完成后怎样恢复 go.mod。208 收藏 -
Go 的 os.Rename 遇到跨文件系统路径时可能返回 invalid cross-device link。稳妥做法是在目标目录创建临时文件,用 io.Copy 完成复制并关闭后,再在目标文件系统内 Rename,最后成功才删除源文件。313 收藏 -
Go 测试需要共享临时目录、测试服务或客户端时,可以用 TestMain 统一初始化和清理。本文说明如何保存 m.Run 的退出码、区分夹具初始化失败与测试失败,并避开 os.Exit 跳过 defer 的清理陷阱。100 收藏 -
Go 文件写入时,Close 可能暴露延迟错误。本文解释如何保留 Write、Flush、Sync、Close 的错误,并给出 errors.Join 实现。235 收藏 -
Go 示例测试可以同时承担文档和回归用例职责:用 Example 命名关联文档对象,用 Output 注释固定标准输出,必要时用 Unordered output 放宽顺序,再把示例纳入 go test ./...。310 收藏 -
使用 Go exec.Cmd.StdoutPipe 时,先 Wait 后读取可能在长输出场景阻塞。文章解释管道容量、子进程写端与父进程读端的关系,并给出单管道、双管道和直接缓冲输出的正确顺序。259 收藏 -
并发测试里偶尔出现的数据竞争,关键不是反复调整 sleep,而是用 go test -race 读懂两条访问栈,锁定共享状态的所有权,再用 channel、mutex 或 atomic 建立同步关系并反向验证。428 收藏 -
终端能运行而 Go os/exec 找不到程序,通常是 PATH、工作目录和绝对路径被混淆。本文用 LookPath、Cmd.Env 和 Cmd.Dir 拆开排查,并给出部署场景的稳妥写法。419 收藏 -
Go 覆盖率不只看总百分比:用 go test 生成 cover.out,再用 go tool cover -func 按函数查看文件、语句数和覆盖率,快速定位该补哪组测试。336 收藏 -
Go embed 报 pattern 没匹配到文件时,先检查声明文件所属包目录、相对路径、通配符和文件存在性,再用 go list 查看 EmbedPatterns 与 EmbedFiles。206 收藏 -
掌握 Go test 的 -run、-count=1 和 -count=N:精确筛选顶层或子测试,排除成功缓存,并重复验证偶发失败。182 收藏 -
Go ldflags -X 注入空字符串时,先确认包级 string 变量,再用 go list 获取完整 import path,最后保留参数末尾等号并运行程序复核。207 收藏 -
Go fuzz 发现失败输入后,不要只记日志。将它保存在 testdata/fuzz/FuzzXxx 目录,修复后用普通 go test 回归;本文说明 f.Add、失败语料文件、复现命令和目录不可写时的处理。326 收藏 -
Go build tags 没生效时,先用 go list 看文件是否进入 GoFiles,再分别检查 //go:build 的位置、表达式逻辑、文件名后缀和 -tags 参数。本文给出一套不依赖猜测的排查顺序。412 收藏 -
用 Go 的 testing.B 对比 json.Marshal 与复用 bytes.Buffer 的 json.Encoder,说明如何固定输入、报告分配次数、避免把准备工作计入循环,并正确解释速度、内存和输出换行差异。148 收藏