-
netip.Addr 中的 192.0.2.1 与 ::ffff:192.0.2.1 可能指向同一个 IPv4,但前者是 IPv4、后者是 IPv4 映射 IPv6,因此直接比较不会相等。本文用最小复现解释 Is4、Is4In6、BitLen 与 Unmap 的关系,并给出 map 键和回归测试的处理方式。
-
Go debug/pe 的 COFFSymbol.Name 只有 8 个字节,短名称直接内嵌,长名称则保存字符串表偏移。本文解释两种编码的判断方式,用 FullName 正确读取长符号名,并说明字符串表位置、辅助记录和坏偏移错误的处理边界。
-
ExtensionsByType 并不返回空字符串,而是按 MIME 类型返回扩展名切片。本文区分 nil、空字符串和 error,并说明 TypeByExtension 与 AddExtensionType 的使用边界。
-
Go 的 http.Redirect 不只是把请求送到新地址,code 参数还决定临时跳转、PRG 和原方法保持等语义。本文按调用方需求说明 301、302、303、307、308 的选择,并给出带中文注释的可复用处理器。
-
只修改 RawQuery 不会自动改变 Path。本文通过保留 RawPath、重建 URL 丢失编码提示和路径二次编码三个对照,解释路径变化的来源,并给出保留解析错误的查询参数修改函数。
-
x509.Certificate.SerialNumber 的类型是 *big.Int,直接转 int64 可能溢出,也不适合做统一日志键。本文给出稳定十六进制格式、issuer 与 serial 的组合方式,以及 nil、负值和原始 DER 编码的边界处理。
-
SystemCertPool 的跨系统差异来自系统信任、进程环境与 Go 版本,不能用 Subjects 数量直接判断可信范围。本文给出不联网的最小复现程序,固定证书链、名称、用途和时间,对照系统信任与显式根,并解释错误与生命周期限制。
-
Go 的 tls.Config 默认禁止 TLS 重协商。本文从旧客户端兼容场景出发,解释 Renegotiation 的三个取值、TLS 1.2 与 TLS 1.3 的边界,以及如何用握手错误和 ConnectionState 判断拒绝原因。
-
Go 双向 TLS 中,只配置 ClientCAs 并不会自动要求客户端证书。本文用 ClientAuth 五种策略区分请求、强制提供与校验,再核对客户端 Certificates、服务端 ClientCAs 和 ConnectionState,定位连接成功但没有触发客户端证书校验的原因。
-
textproto.MIMEHeader.Values 会返回指定键关联的全部值,适合处理重复邮件头;Get 只取首值。本文用原创 Go 示例说明大小写键、缺失字段、nil map 与返回切片可变等边界。
-
Go 自定义根证书未生效时,先核对 Client 与 Transport 的配置归属,再区分信任链和主机名错误。通过本地 HTTPS 服务与两种证书池构造最小复现,并说明 PEM 加载、连接复用和 CA 轮换的处理方法。
-
mime.WordDecoder 遇到非内置字符集时,关键不是重写邮件头解析,而是让 CharsetReader 把指定字符集的字节 Reader 转成 UTF-8。本文从故障表现、回调输入到 Windows-1252 接入,说明 DecodeHeader 的错误边界与回归检查点。
-
用一个阻塞处理器构造 Go http.Server 优雅关闭的最小复现,再结合 ConnState、请求上下文和超时区分活动请求、空闲连接与 hijack 连接。
-
StateIdle 表示请求处理完成后的 keep-alive 等待,并不等于连接泄漏。本文用 http.Server.ConnState 记录状态和时间戳,再结合 IdleTimeout、StateClosed、HTTP/2 与 Hijacked 边界判断长期停留是否正常。
-
Go http.Client 请求超时却没有按预期结束,常见原因是使用了零值 Timeout、忽略了响应体读取阶段,或把 HTTP 状态错误误当成传输错误。本文用 httptest 构造延迟响应头的最小复现,并对比 Client.Timeout 与请求级 Context 的使用边界。