Go问答技术文章
-
go build -trimpath 会移除可执行文件中的本机目录,但不会删除函数名、行号和调用栈。本文解释 runtime.Caller 如何读取裁剪后的逻辑文件名,并给出生产构建、本地调试与源码版本关联的选择方法。298 收藏 -
Go 私有模块下载出现 404 时,先判断请求落到了公共代理还是企业代理,再用 GOPRIVATE、GONOPROXY 和 GOPROXY 配置正确的下载边界。190 收藏 -
GOPROXY=direct 只负责让 Go 直接访问版本控制系统,私有模块的认证仍要交给 Git 的 HTTPS 凭据助手或 SSH;本文用一条请求链路说明如何配置和排查。213 收藏 -
go mod verify 检查本地模块缓存是否仍与 go.sum 记录一致,而 go.sum mismatch 是下载或校验阶段发现模块哈希不匹配。本文按校验对象、缓存边界和排查命令拆开说明。350 收藏 -
go.mod 的 replace 指向 ../local-module 时,开发机能编译并不代表发布环境也能找到该目录。本文从模块图和构建上下文解释失败原因,并给出 go.work、本地模块版本和发布前检查清单。499 收藏 -
Go module 的 pseudo-version 中间 14 位是修订创建时间的 UTC 表示,不是 author time。本文拆解基准版本、时间戳和提交哈希,并用 go list -m -json 核对实际依赖。240 收藏 -
Go fuzz 失败后会把可复现输入写入 testdata/fuzz 目录。本文说明如何区分 seed corpus 与缓存语料,用 go test 精确重放、理解最小化输入,并把失败文件保留为回归测试。116 收藏 -
Go benchmark 的 allocs/op 偏高时,不要先猜编译器或垃圾回收;从测试夹具、循环内临时值、切片扩容、字符串转换和逃逸边界逐项拆分,才能定位真正的分配来源。322 收藏 -
Go 表驱动测试加上 t.Parallel 后,多个子测试可能读到同一个循环变量。本文解释暂停时机、Go 版本差异、局部绑定写法和 -race 排查边界。444 收藏 -
Go test -run 匹配不到子测试名称,通常是忽略了父子测试名称的斜杠分段。本文用原创示例解释逐层正则、空段、锚点和特殊字符的写法,并给出 -list 排查清单。386 收藏 -
go test -race 报告读写冲突时,不要只看两行文件位置;要沿访问栈、创建栈和共享存储边界确认真正被并发访问的变量,再选择锁、channel 或 atomic 修复。352 收藏 -
go vet 报 copylocks 通常说明包含 Mutex 等同步对象的结构体被按值传递或复制。本文解释值接收者、参数、赋值和 range 的风险,并给出指针接收者与无锁快照的修复方式。246 收藏 -
Go 遇到 import cycle not allowed 时,问题不是 import 写法,而是包依赖图形成了闭环。本文用 go list 定位循环,并比较接口倒转依赖与共享类型下沉两种拆分方式。446 收藏 -
Go internal 包能否导入,不是只看 go.mod 是否相同,而是看调用方是否位于 internal 父目录树内。本文用目录结构和最小示例解释失败原因,并给出移动目录、公开包和拆分模块的修复边界。380 收藏 -
解释 Go go:linkname 与普通 import 的区别,定位 Go 1.23 标准库内部符号链接失败的原因,并给出公开 API、handshake 与最小验证建议。448 收藏