Go问答技术文章
-
Go TLS 证书验证失败时,不要先关闭校验。先按 x509 错误判断主机名是否匹配,再检查 RootCAs、中间证书和系统根证书,最后用 VerifyOptions 做独立定位。487 收藏 -
Go 结构体含 sync.Mutex 时,值接收者、参数传递、range 和 map 取值都可能复制锁。本文对比指针语义、快照边界与 go vet copylocks 的审查方法。431 收藏 -
Go append 是否改到原切片,关键看两个切片是否共享底层数组以及剩余容量。本文用 len、cap、三索引切片和 slices.Clone 给出判断与隔离方法。407 收藏 -
sort.Slice 不会替你校验 less 比较器是否构成严格弱序。本文从异常结果、传递性、多字段排序、稳定排序和测试清单说明如何修复比较器。404 收藏 -
Go 测试提前 Fatal 时,已注册的 t.Cleanup 仍会在测试边界执行。本文梳理后进先出、父子测试资源归属,以及异步 goroutine 错误回传的安全写法。399 收藏 -
解释 Go crypto/rand.Read 的完整填充保证,并用 io.ReadFull 处理自定义 Reader 或通用 io.Reader 的短读,避免把不足字节的数据误当成完整令牌。351 收藏 -
Go crypto/x509 中把自签名根证书加入 Roots 仍验证失败时,重点检查 Intermediates、服务器发送链、DNSName 和错误类型,本文给出可复用的排查代码与部署清单。327 收藏 -
Go sync.Pool取回旧对象时,问题通常来自复用对象没有建立完整的初始化协议。本文从Get后的重置、Put前的所有权检查和并发排查三个方面说明如何消除残留状态。327 收藏 -
Go fuzz 测试遇到 []byte 被修改、后续用例结果漂移时,关键是建立输入所有权:保留原始快照,把可变操作放到独立副本上,并检查返回切片与缓存是否复用底层数组。315 收藏 -
从 goroutine 堆栈定位 Go 结果 channel 的 chan send 阻塞,区分无缓冲、满缓冲和 nil channel,并用 context、select、WaitGroup 补齐接收、取消与关闭路径。292 收藏 -
Go 中用 sync/atomic 保护变量时,若另一条路径仍然普通读写,同一地址依旧可能产生数据竞争。本文给出按访问清单定位、统一同步模型、迁移字段、检查边界和 race 回归的修复步骤。289 收藏 -
Go 测试中 t.Parallel 与 t.Setenv 不能直接混用。本文用串行父级、配置注入和串行分组三种组织方式,解决全局环境变量影响并行子测试的问题。265 收藏 -
Go copy返回值偏小时,先看目标切片的len而不是cap。本文用代码和表格说明copy的可见范围、容量扩展方式、重叠复制与空切片边界。246 收藏 -
Go context取消后下游循环仍运行,通常是阻塞调用、channel边界或context传递链没有覆盖。本文按检查清单定位取消信号、补齐退出分支,并区分协作式取消与等待goroutine结束的边界。175 收藏 -
从并发读写 panic 的调用关系入手,比较 map 加 RWMutex、sync.Map 和单协程所有权三种替代结构,给出迁移代码与回归检查边界。108 收藏