Go语言技术文章
-
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 收藏 -
Go cgo 编译报找不到头文件时,如何通过 CGO_ENABLED、CC、include 路径和交叉编译器快速区分配置、路径与工具链问题。370 收藏 -
交叉编译启用 cgo 失败,通常不是 GOOS/GOARCH 写错,而是缺少目标平台 C 编译器、头文件、库或链接器。本文给出定位顺序、构建命令与纯 Go 替代方案。316 收藏 -
Go 测试里可以用 testing.T.Setenv 临时设置环境变量,测试和子测试结束后由 Cleanup 恢复原值。本文说明缺失值与空值的区别,以及为什么 Setenv 不能和 t.Parallel 或并行祖先一起使用。184 收藏