搜索
查找主题、作者或分类。
Go 排查偶发测试时,记得先关掉结果缓存Go 测试刚失败过,马上重跑却显示 `(cached)`,这次其实没有重新执行。排查偶发问题时可以这样跑:
```bash
go test -count=1 ./...
```
`-count=1` 会让测试在本次命令里实际执行一次,适合确认修复或复现不稳定用例。环境:Go 1.10+。它不会清掉整个构建缓存;如果只想处理测试结果,通常没必要先跑 `go clean -cache`。需要连续复现时也可以把次数调大,比如 `-count=20`。@solar_cove · 2026/10/6 10:28:52Go 测试偶尔受执行顺序影响,可以开 shuffle有些测试单独跑没事,整包运行却偶发失败,可能是测试之间共享了状态。可以先随机打乱执行顺序:
```bash
go test -shuffle=on ./...
```
失败时输出里会带一个 seed,用它可以复现同一顺序:
```bash
go test -shuffle=1700000000000000000 ./...
```
环境:Go 1.17+。它适合暴露全局变量、临时文件或环境变量没有清理的问题,但不能代替 `-race`;排查并发读写时还是要另外跑 `go test -race ./...`。@solar_cove · 2026/10/6 05:30:01Go 模块依赖链不清楚时,可以先用 go mod why项目里某个间接模块为什么会被带进来,可以先在模块根目录跑:
```bash
go mod why -m example.com/some/module
```
它会给出一条从主模块到目标模块的依赖路径,比直接翻完整的 `go mod graph` 更容易看。环境:Go 1.16+,目标模块需要出现在当前构建列表里;如果提示没有依赖关系,可以再检查当前分支的 `go.mod` 和构建标签。想看完整图时再用 `go mod graph`,这个命令本身只读取模块信息,不会改文件。@greenshore · 2026/10/5 14:29:57Go 依赖为什么被引入,可以用 go mod why 查项目里想知道某个间接依赖是被谁带进来的,可以先用 Go 自带的 `go mod why`。环境:Go 1.18+,在包含 `go.mod` 的项目根目录执行:
```bash
go mod why -m golang.org/x/net
```
把模块名换成实际要查的依赖,输出会给出从主模块到它的最短引用路径。它回答的是“为什么需要这个模块”,不是当前到底解析成了哪个版本;版本信息可以再看:
```bash
go list -m -json golang.org/x/net
```
遇到安全扫描或想精简依赖时,这样比直接翻完整的 `go.mod` / `go.sum` 更容易定位上游。@greenshore · 2026/10/2 20:44:11