-
Go go env GOTOOLDIR 返回的是当前宿主工具链目录,不是 GOOS/GOARCH 目标目录。本文用 go env、工具文件检查和最终二进制复查,建立一套核对交叉编译路径的排障流程。
-
Go generate 未执行预期指令时,区分注释未识别、包未选中、工具失败和输出目录偏移。通过包内生成器示例说明指令格式、工作目录、参数解析与产物责任。
-
GOTOOLCHAIN=auto 会结合 go.mod 或 go.work 的版本要求选择工具链。本文拆开 local、auto、path 与 name+auto/name+path 的边界,说明启动选择、依赖触发切换和排查命令。
-
Go workspace 明明写了 use 却没有使用本地模块,通常是路径没有指向 go.mod 所在目录、嵌套模块没有单独加入,或当前命令根本没有加载目标 go.work。本文按症状拆开判断和修复方法。
-
Go replace 的本地目录替换不会随依赖库自动传递。结合应用与库发布场景说明主模块作用域、工作区掩盖、版本迁移和独立消费者检查。
-
os.Executable 返回的是启动当前进程的可执行文件路径,但符号链接、文件替换和部署变更都会影响它是否仍指向预期文件。本文用最小 Go 示例说明错误处理、EvalSymlinks 与资源目录选择。
-
Go checksum mismatch 不能靠盲目删除 go.sum 或关闭 GOSUMDB 解决。本文按公共模块、缓存污染、重新打标签和私有模块四种边界,给出一套保留完整性校验、可复查且适合提交到团队仓库的修复方法。
-
Go GOPROXY 返回 404 时,先不要急着更换代理。本文从模块路径、主版本后缀、可用版本列表、代理回退规则和私有模块配置五个方面定位问题,配合 go list -m -versions 与 go mod download 找到真正缺失的是路径、版本还是来源。
-
新增依赖没有出现在 Go vendor 中时,按模块图确认、重新执行 go mod vendor,再用 vendor/modules.txt 和 -mod=vendor 构建验证,避免手工修改 vendor。
-
Go embed pattern 无匹配文件时,先按源码包目录定位资源,再恢复编译前的真实产物。结合包内目录示例说明空目录、隐藏文件、上级路径与构建流水线的修复取舍。
-
Go build tags 未选中目标文件时,先用 go list 看文件分类,再检查 //go:build 位置和布尔表达式,最后核对 GOOS、GOARCH、cgo 与 -tags。本文给出一套从现象到修复的排查顺序。
-
Go 交叉编译时把 CGO_ENABLED 改成 1 还不够。本文按目标三元组、CC/CXX、头文件与 sysroot、pkg-config 和链接阶段给出一套工具链排查顺序。
-
Go compress/flate 的 Write 只接收输入,Writer.Close 才负责把待处理数据和压缩流结尾写入底层 Writer。本文区分 Flush、Close、Reset 的职责,说明底层写入错误如何传回,以及流式压缩在文件、内存和网络场景中的收尾方式。
-
Go text/template 的 Execute 执行失败时,Writer 可能已经收到部分结果。本文用 missingkey=error 解释部分输出与错误同时存在的原因,再用 bytes.Buffer 隔离模板渲染和正式提交,并区分模板错误、最终写出错误、并发共享 Writer 与 html/template 的边界。
-
Go benchmark 第一次结果偏慢时,先区分测试框架的首轮校准、被测函数的 lazy init 和环境噪声,再决定是否预热。本文用 b.Loop、StopTimer、ResetTimer 以及 -benchtime、-count 组合,建立可解释的 cold path 与 warm path 测量方式。