Go问答技术文章
-
讲清 Go sync.WaitGroup 的计数快照、Add 与 Wait 的竞态边界,以及动态派生任务和 WaitGroup.Go 的安全用法。441 收藏 -
Go 服务调整 TLS 最低版本后旧客户端握手失败,通常不是证书单一问题,而是双方允许的协议版本没有交集。本文用 tls.Config、MinVersion、MaxVersion 和连接状态说明如何定位,并给出隔离旧客户端入口的兼容策略。440 收藏 -
Go 客户端自定义 TLS 拨号或按 IP 连接时,ServerName 缺失会破坏主机名校验与 SNI 证书选择。本文区分拨号地址、证书身份和根证书信任,给出 http.Transport 与 tls.Client 的安全修复写法。440 收藏 -
Go SetFinalizer 的触发时机由垃圾回收决定,不适合承担文件描述符、连接等非内存资源的确定性关闭。本文用 Close、defer、sync.Once 和 runtime.AddCleanup 组合出显式主路径加兜底清理的方案,并说明边界。439 收藏 -
Go embedding 的字段冲突要先看选择器路径:同层同名会产生歧义,外层同名会隐藏嵌入字段,而方法提升还要单独检查签名与显式调用路径。本文用最小示例说明如何定位并修复。438 收藏 -
Go 子切片 append 后原切片内容被改写,通常是因为子切片仍有足够 cap,append 复用了同一个底层数组。本文用 len、cap、三索引切片和复制方案说明如何判断与隔离。438 收藏 -
说明 Go 服务启动时如何为 database/sql 的 PingContext 设置独立超时,区分超时、取消和驱动错误,并选择失败退出或降级策略。438 收藏 -
Go 测试中的 testexit 不是常规公开参数。本文比较 os.Exit、runtime.Goexit、t.FailNow、t.SkipNow、TestMain 和 -timeout 的退出范围,帮助你把失败、跳过、进程退出与资源清理分开处理。436 收藏 -
Go 1.21 及以上的新代码通常优先用 slices.SortStableFunc;旧版本兼容或强依赖索引比较器时可保留 sort.SliceStable。本文对照两种比较器契约、迁移风险与稳定性断言。436 收藏 -
解释 Go 表驱动并行测试为什么会读到同一个循环变量,给出 tc := tc 的兼容写法,并区分 Go 1.22 语义、浅复制和共享资源问题。435 收藏 -
Go archive/zip 的 Writer.Create 遇到同名路径不会覆盖,而会追加重复条目。本文用路径规范化、seen map 和待写集合,分别实现拒绝重复与最后一份生效两种方案。435 收藏 -
区分 Go 字符串的字节偏移、rune 数量和用户感知字符,给出按 rune 边界与按字节预算安全截断的修复写法。435 收藏 -
Go 的 http.Client 跨主机重定向后看不到 Authorization,通常是默认的敏感头保护。本文用 CheckRedirect、可信 Origin 和手动跟随策略,给出安全可控的处理方式。435 收藏 -
Go 项目已经生成 vendor,编译却仍访问模块代理,通常不是 vendor 目录失效,而是 -mod 参数、GOFLAGS、go.mod 版本门槛或 vendor/modules.txt 不一致。本文按检查顺序给出定位和修复方法。433 收藏 -
Go 的 UnmarshalJSON 适合处理 JSON 表示与 Go 类型之间的边界,不应承载数据库、权限或完整业务校验。本文用别名类型、临时结构和错误分层说明如何限定自定义解码责任。433 收藏