Go语言技术文章
-
Go 处理 gzip 时要同时限制压缩输入和解压输出。本文用 io.LimitReader(maxOutput+1) 识别超限,并说明多成员、EOF、校验和与资源释放边界。498 收藏 -
Go vendor 不是简单复制依赖目录。本文说明如何用 go mod vendor 生成离线依赖,理解 vendor/modules.txt 的版本清单,并用 GOPROXY=off 检查构建是否真正摆脱网络和模块缓存。326 收藏 -
Go 解包 tar 时,先把 Header.Name 当成不可信输入,拒绝绝对路径、.. 路径和链接条目,再用 filepath.IsLocal 与 filepath.Rel 把目标限制在根目录内;词法检查通过后仍要单独考虑符号链接和文件系统竞态。286 收藏 -
同一仓库维护多个 Go 模块时,可以用 go.work 的 use 指令共享本地开发版本。本文说明如何初始化工作区、验证本地解析、区分 go.work 与 replace,并让 CI 用 GOWORK=off 回到独立模块测试。456 收藏 -
filepath.Clean 只做路径字符串的词法规范化,不能判断用户是否有权访问某个目录。本文用 Go 示例拆开 Clean、Rel、IsAbs 与符号链接检查的边界。437 收藏 -
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 收藏