-
Go sync.Pool取回旧对象时,问题通常来自复用对象没有建立完整的初始化协议。本文从Get后的重置、Put前的所有权检查和并发排查三个方面说明如何消除残留状态。
-
Go 1.24 起可以通过 net/http.Protocols 明确控制 Server 接收的协议。本文用服务端配置示例说明如何让 HTTP/1 与未加密 HTTP/2 共存,解释 h2c 与 TLS HTTP/2 的差异,并给出回滚和排障要点。
-
解释 Go x/text/secure/precis 的 OpaqueString 为什么面向 Unicode 口令字符串,而不是任意二进制秘密,并给出 Go 中的选型和错误处理方式。
-
Go go-geom 中空几何没有坐标,零坐标点却是有效的 (0,0) 坐标。本文用 NewPointEmpty、NewPoint、Empty 和 GeometryCollection 说明两者差异,并给出导入与计算前的安全判定方式。
-
Go TLS 的 MinVersion 限定协议协商下限,旧客户端最高版本不足时会因无共同版本握手失败。本文给出服务端配置示例,说明证书、TLS 终止点、日志与版本组合排查方法。
-
Go archive/zip 出现 directory size overflow 时,先区分单个文件大小、ZIP 中心目录大小和旧实现的 32 位字段限制,再按流式写入、Zip64、Close 错误和消费端兼容性逐项排查。
-
Go HTTP 客户端已复用 Client 与 Transport,连接数仍上涨时,应检查 Response.Body 是否读到 EOF 并关闭。本文给出小响应体、错误状态码和大响应体的处理策略,并说明 HTTP/1.x 连接复用的边界。
-
解释 Go Excelize 读取公式单元格时拿到旧结果的原因,区分缓存值与重新计算值,并给出 CalcCellValue 的排查和使用方法。
-
Go 的 http.Transport 把 MaxIdleConnsPerHost 设为零时并不是禁止连接复用,而是回退到 DefaultMaxIdleConnsPerHost。本文拆开空闲连接、活跃连接、全局上限和 DisableKeepAlives 的区别,给出可直接调整的配置方式。
-
Go encoding/csv 遇到 CSV 字段数量不一致时,不必直接丢弃整条记录。本文用 FieldsPerRecord、ParseError 和 InputOffset 拆分正常行与坏行,保留可复查的错误位置。
-
Go slog.SetDefault 可以让 slog 顶层函数和标准 log 默认 Logger 共用同一个结构化 Handler。本文说明 JSONHandler 接入、SetLogLoggerLevel 的级别控制,以及独立 log.Logger 与 NewLogLogger 的边界。
-
reflect.Value.MapIndex 找不到键时返回的是无效的 zero Value,不应直接调用 Interface、Kind 或 Elem。本文说明怎样用 IsValid 判断缺失键,区分元素零值与缺失键,并处理 nil map、key 类型和并发访问边界。
-
Go 测试里 t.Setenv 会通过 Cleanup 恢复进程环境,但环境变量属于整个进程,不能与 t.Parallel 或并行父测试混用。本文用一个小型配置测试项目拆开这个限制,给出串行隔离、参数注入和子测试分组的选择边界。
-
sync.OnceFunc 会缓存初始化函数的 panic 结果,失败后再次调用不会自动重试。本文用最小示例拆开成功、失败和显式重试三种边界。
-
time.Time.Round 按绝对时间而不是显示出来的本地小时取整,所以跨日期、带时区和带单调时钟的值容易出现误判。本文用可复现的 Go 示例拆开 Round、Truncate、Location、== 与序列化的边界。