-
用最小 Go 程序复现 os.OpenFile 的权限差异,解释 O_CREATE、perm、umask 与已有文件权限之间的关系,并给出需要显式 Chmod 时的处理方式。
-
RawValue 的 FullBytes 非空时,Marshal 优先使用整段编码,修改 Bytes 不会自动使旧编码失效。本文用 OCTET STRING 字节对照展示问题,给出清空 FullBytes 与构造新值两种写法,并说明切片共享、基准方法和嵌套数据限制。
-
Go 的 net.Resolver 可能在纯 Go DNS 解析和系统 cgo 解析之间走不同路径,因此同一域名会出现地址顺序、搜索域或错误表现差异。本文用 PreferGo、GODEBUG=netdns 和可控 Dial 构造最小复现,帮助定位解析器选择边界并写回归测试。
-
Go 经过 HTTP 代理访问 HTTPS 时,代理需要的字段必须放在 CONNECT 握手请求中。本文区分 ProxyConnectHeader、GetProxyConnectHeader 与目标请求 Header,说明静态配置、动态回调、代理认证和错误边界。
-
ELF 的 NOBITS 节可以有非零逻辑 Size,却没有对应文件内容。本文给出按节类型分支的 Go 读取器,区分正常空节、无文件内容与读取失败,并说明大小预算、资源关闭及旧代码迁移注意事项。
-
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 与返回切片可变等边界。