Go语言技术文章
-
gctrace 的 clock、cpu 与堆目标各有统计口径。本文区分 STW 和并发标记、goal 与 RSS,说明先构建后采集的写法,以及日志开销、采样周期和结构化指标的边界。408 收藏 -
Go 服务请求结束后内存不降,不一定是 GC 失效。本文只围绕切片容量、缓存引用和 runtime/metrics 指标,说明如何区分活跃堆、保留的 backing array 与尚未归还的运行时页。299 收藏 -
Go test -cover 的高百分比不等于边界已覆盖。本文用一个输入校验例子,说明如何拆分分支矩阵、补齐错误路径,并用 coverprofile 找到真正漏测的位置。122 收藏 -
Go Benchmark 结果抖动时,先检查 ResetTimer、RunParallel 与外部资源是否把计时范围混在一起。本文用固定输入、并行边界和重复运行命令整理 ns/op 与 allocs/op 的正确解释方式。395 收藏 -
Go fuzz 测试持续扩大输入时,问题往往来自探索时间、失败输入最小化和共享状态副作用叠加。本文按故障复盘顺序拆分 -fuzztime、-fuzzminimizetime、seed corpus 与 target 隔离,给出可控且可复现的排查方案。257 收藏 -
httptest 的 Host 与普通 Header、URL.Host 并非同一字段。本文解释路径请求的默认主机,给出表驱动 Handler 测试和本地 HTTP 往返写法,并说明端口与 TLS 的边界。200 收藏 -
Go 测试单独运行正常、并行运行却偶发失败,通常不是断言随机,而是环境变量、临时文件、全局配置或可变夹具被多个测试共享。本文按故障根因拆解 t.Parallel 的并发边界,并给出参数化配置、t.TempDir、串行环境变量和分组清理的隔离方案。499 收藏 -
Go ldflags 注入变量为空时,优先检查包路径、包级 string 变量和最终构建命令。本文用 go list 获取真实 import path,说明 -X 的变量边界、shell 引号和 CI 二次构建覆盖问题。162 收藏 -
cgo 缺头文件、找不到库与符号未解析属于不同问题。本文以 Linux GCC 静态库示例,说明 CGO_ENABLED、-I、-L、-l 的职责,以及迁移 CI 时需要保留的工具链和原生文件。475 收藏 -
Go 交叉编译后程序无法启动,优先检查 GOOS、GOARCH、CGO_ENABLED 与动态依赖是否和目标机器一致。本文按启动症状给出一套可执行的参数排查顺序。184 收藏 -
围绕 go.mod、vendor/modules.txt 与构建模式,整理 Go inconsistent vendoring 的定位、重建和 CI 复查清单。415 收藏 -
从标签表达式、文件名后缀和 GOOS/GOARCH 三层筛选解释 Go 文件为何被排除,并用 go list 定位实际构建集合。277 收藏 -
Go 模块拆分后出现 ambiguous import,通常是父模块和拆分子模块同时提供同一个包路径。本文用模块图、版本配套升级与 replace 过渡说明迁移处理方式。290 收藏 -
Go 本地 replace 在 CI 失败,常见原因是主模块选择不同或替换目录缺失。本文解释相对路径基准、检出布局、Docker 构建上下文及发布边界,并给出诊断命令。423 收藏 -
Go 私有依赖出现校验和失败时,按 GOPRIVATE、GONOSUMDB、GOPROXY 和 Git 凭据分层排查,避免用全局关闭校验掩盖代理或认证问题。116 收藏