Go语言技术文章
-
Go 基准测试初始化被算进 ns/op 时,先确认计时边界。本文说明 b.Loop、b.N、ResetTimer、StopTimer 和 StartTimer 的正确分工,并处理每轮必须准备输入的场景。410 收藏 -
Go 测试中 t.Parallel 与环境变量冲突时,先检查并行祖先和共享状态,再将环境适配测试串行化,用独立配置注入支持并行业务测试。223 收藏 -
Go 泛型里的 any 是普通空接口,而带类型元素的接口约束只描述允许的类型集合,不能直接当作变量类型。本文用最小示例拆开两者差异,并给出保留 T、转为 any 和定义方法接口的修复方案。181 收藏 -
Go 泛型调用无法推导类型参数时,先判断缺少的是实参类型信息、函数值上下文还是约束匹配,再补完整类型参数或最短前缀。本文用无参数函数、部分推导、回调和 comparable 约束说明修复边界。171 收藏 -
Go 私有模块校验和失败要先区分公共校验库访问、仓库认证和真实摘要冲突。本文解释 GOPRIVATE 与显式覆盖,分别给出直连、企业代理配置,并说明为何应保留 go.sum 和不可变版本。241 收藏 -
Go 泛型约束列出多个类型时,类型参数并不能自动获得这些类型各自拥有的方法。本文从类型集合、约束方法集、指针接收者和联合类型四个边界排查调用失败,并给出可落地的修复写法。372 收藏 -
Go 项目已有 vendor 目录却没有使用时,先检查主模块根目录、go.mod 的 go 版本、GOFLAGS 或 -mod 覆盖项,再用 go mod vendor 同步 vendor/modules.txt,并用 -mod=vendor 确认构建路径。413 收藏 -
Go pprof 阻塞 profile 没有数据时,重点检查 SetBlockProfileRate、pprof 路由、采集窗口和真实阻塞事件。本文给出最小配置、读取命令和排查边界。209 收藏 -
Go 的 replace 会改变依赖内容和模块图,但不会单独完成版本选择。本文用 go list -m all、go env GOWORK 和最小 go.mod 示例,定位版本不一致并区分本地开发与正式构建配置。430 收藏 -
Go pprof 堆 profile 与实时对象数量不同,常见原因是指标单位、存量与累计口径、GC 时点和采样估算不同。本文用两份本地快照示例说明如何保留对象、显式选择指标,并避免误判泄漏。211 收藏 -
Go pprof CPU profile 看不到业务函数时,先区分采样窗口没有业务热点,还是 profile 与分析端二进制没有正确配对。本文给出精确二进制、本地符号化、构建裁剪和复采样的排查路径。248 收藏 -
Go httptrace.WroteRequest 回调中的 Err 只描述请求写入阶段,不能单独证明服务端是否收到或处理了请求。本文用阶段化 trace、主流程错误和幂等重试边界,说明如何判断请求状态。393 收藏 -
Go 调整 GOGC 后暂停时间没有明显变化,通常不是参数没用,而是 GOGC 只改变目标堆大小和 GC 频率,单次暂停还可能受根扫描、调度停顿、GC assist 与分配突增影响。本文按证据拆分根因并给出修复边界。280 收藏 -
解释 Go time.AfterFunc 的回调与 Timer.Stop 同时发生时如何判断返回值,并用 done 或 WaitGroup 协调回调完成与资源清理。148 收藏 -
Go Timer Reset 后仍读到旧事件,先看 Go 版本与 Timer 类型:Go 1.23 的 NewTimer 已保证 Reset 后不返回旧值,旧版本需要 Stop 加非阻塞排空;AfterFunc 还要单独处理并发回调。117 收藏