Go问答技术文章
-
Go 反射访问未导出字段时,Value.Interface 会因封装边界触发 panic。本文用 CanInterface 判断访问能力,并给出类型化读取、公开方法和 DTO 拷贝的选择。330 收藏 -
解释 Go 中 unsafe.Pointer 与 uintptr 的生命周期差异,说明为什么地址整数不能长期保存,并给出受限偏移、真实指针、索引和检查工具的可执行判断方法。330 收藏 -
从 Go pprof goroutine profile 的等待状态和栈顶函数入手,区分通道、锁、网络、定时器与可运行协程,并说明何时切换到 block、mutex profile 或 trace。330 收藏 -
解释 Go json.RawMessage 的字节所有权边界,区分 Unmarshal 已复制和直接切片转换未复制的场景,并给出长期保存原始 JSON 的安全写法。330 收藏 -
Go 的 io.Reader 可以在一次 Read 中同时返回 n > 0 和 io.EOF。正确顺序是先处理 buf[:n],再判断 err;否则会丢掉输入流最后一段有效数据。本文给出通用循环、错误优先级、0,nil 边界与标准库替代方案。330 收藏 -
CloseIdleConnections 只清理 Transport 中已经空闲的 keep-alive 连接,不会打断正在使用的请求。文章用发布切换场景说明它与 Transport 复用、响应体关闭和灰度验证的边界。329 收藏 -
看到 Go 编译报告中的 moved to heap 时,不要只凭一条提示判断性能。本文用 -gcflags=-m=2 追踪地址和生命周期,再结合 -benchmem 对照确认是否值得优化。328 收藏 -
Go module checksum mismatch 不要先删 go.sum。本文通过 go mod download -json、go.sum、GOSUMDB 与 GOPROXY 对照,判断是内容变化、代理缓存还是私有模块配置边界。328 收藏 -
Go 官方 watchflakes issue #81328 记录了 cgo_stale 在 ppc64 构建器的 signal: killed。本文从测试脚本、CGO_CFLAGS、GOCACHE 与编译器日志入手,说明为什么不能把资源终止误判成缓存陈旧,并给出可复查的证据链。327 收藏 -
用 errgroup.WithContext、SetLimit、TryGo 和 Wait 处理 Go 并发读取与转换任务,讲清并发上限、错误取消、结果收口和常见边界。327 收藏 -
Go crypto/x509 中把自签名根证书加入 Roots 仍验证失败时,重点检查 Intermediates、服务器发送链、DNSName 和错误类型,本文给出可复用的排查代码与部署清单。327 收藏 -
Go sync.Pool取回旧对象时,问题通常来自复用对象没有建立完整的初始化协议。本文从Get后的重置、Put前的所有权检查和并发排查三个方面说明如何消除残留状态。327 收藏 -
Go archive/zip 出现 directory size overflow 时,先区分单个文件大小、ZIP 中心目录大小和旧实现的 32 位字段限制,再按流式写入、Zip64、Close 错误和消费端兼容性逐项排查。326 收藏 -
Go 测试里 t.Setenv 会通过 Cleanup 恢复进程环境,但环境变量属于整个进程,不能与 t.Parallel 或并行父测试混用。本文用一个小型配置测试项目拆开这个限制,给出串行隔离、参数注入和子测试分组的选择边界。325 收藏 -
sync.OnceFunc 会缓存初始化函数的 panic 结果,失败后再次调用不会自动重试。本文用最小示例拆开成功、失败和显式重试三种边界。325 收藏