Go问答技术文章
-
Go ldflags -X 注入空字符串时,先确认包级 string 变量,再用 go list 获取完整 import path,最后保留参数末尾等号并运行程序复核。207 收藏 -
Go build tags 没生效时,先用 go list 看文件是否进入 GoFiles,再分别检查 //go:build 的位置、表达式逻辑、文件名后缀和 -tags 参数。本文给出一套不依赖猜测的排查顺序。412 收藏 -
Go cgo 编译报找不到头文件时,如何通过 CGO_ENABLED、CC、include 路径和交叉编译器快速区分配置、路径与工具链问题。370 收藏 -
交叉编译启用 cgo 失败,通常不是 GOOS/GOARCH 写错,而是缺少目标平台 C 编译器、头文件、库或链接器。本文给出定位顺序、构建命令与纯 Go 替代方案。316 收藏 -
Go 项目新增依赖后,go.mod 已经变化但 -mod=vendor 仍然找不到包,通常是 vendor 目录和 vendor/modules.txt 没有同步。本文按检查、更新、复查三条线定位原因。388 收藏 -
Go replace 指向本地目录后 CI 找不到依赖,通常是替换路径在干净 runner 中不可见。本文用相对路径、go.work 和可访问模块三种方案说明如何修复,并给出提交前的反向检查。448 收藏 -
GOPROXY=off 不是使用本地缓存的开关,而是禁止 go 命令从任何来源下载模块。本文从 GOMODCACHE、go.sum、vendor 和 file 代理几个边界说明新依赖失败的原因,并给出可复现的离线构建处理方式。155 收藏 -
Go 出现 verifying module: checksum mismatch 时,先保留模块路径和版本,核对 go.mod、go.sum、本地模块缓存,再检查 GOPROXY、GOSUMDB 与 GOPRIVATE。本文给出不误删校验记录的排查顺序和恢复动作。104 收藏 -
Go 的 internal 包不是按符号链接显示位置授权。模块模式下,go 命令主要按导入路径判断 internal 父树;本文讲清报错原因、定位方法与模块边界修复方案。294 收藏 -
t.Setenv 修改的是整个测试进程的环境变量,Cleanup 只负责结束后恢复,不能消除并行期间的共享状态。本文说明 t.Parallel 的直接与祖先冲突,并给出串行环境测试和显式配置注入的改法。381 收藏 -
Go 测试使用 t.Parallel 后,如果多个子测试复用父测试创建的临时目录、固定文件名或可变对象,就可能互相覆盖。本文解释调度边界,给出 t.TempDir 隔离夹具、识别共享资源和复查修复的实用方法。432 收藏 -
Go test 输出 cached 并不代表环境变量读取失败,而是成功测试结果可能被复用。本文解释缓存输入、环境变量边界、GODEBUG 线索和 -count=1 的正确用法。468 收藏 -
go vet 的 printf 检查会对照格式动词与实参数量、类型。本文用 Go 示例解释 %d、%s 等格式为什么触发诊断,以及如何修正而不是用 %v 掩盖问题。181 收藏 -
unsafe.Pointer 转换只改变地址视图,不会自动延长 Go 对象生命周期。本文从外部同步调用和对象可达性断点说明 runtime.KeepAlive 的正确位置,并区分 C 代码跨调用保存 Go 指针时的 Pinner、C 内存和 cgo.Handle 方案。264 收藏 -
Golang · Go问答 | 3星期前 | 反射 · Go问答 · Go reflect.ValueOf typed nil Value.IsValid Value.IsNil nil interface
reflect.ValueOf(nil).IsValid() 返回 false,不是反射失效,而是 nil interface 没有动态类型,ValueOf 返回了 zero Value。本文对比 nil interface 与 typed nil,并给出安全的 IsValid、Kind、IsNil 判断顺序。285 收藏