-
Go 通过域名连接时,如果 IPv6 地址优先但链路实际不可达,连接可能出现异常等待。本文拆分 DNS 与 TCP 阶段,说明如何用 DialContext、Fast Fallback 和有限超时处理。
-
Go 里常说的 DNSResolver 实际通常指 net.Resolver。若自定义 Dial 始终连首选 DNS,查询超时后不会自动切换到备用服务器;本文拆开 Dial、context 和查询级主备策略,用两个 Resolver 与独立超时预算实现可审查的 DNS 故障切换,并说明缓存、并发和系统解析器的边界。
-
纯 Go DNS 解析器遇到搜索域结果差异时,先在同一环境比较短名、完整名称和尾点绝对名称,再检查 search、ndots 与实际解析器。提供有限超时的 Go 对照程序,说明候选顺序、配置修复及内部名称安全边界。
-
Go 老客户端连接失败时,先对照客户端 MaxVersion 与服务端 MinVersion,确认双方是否存在 TLS 版本交集,再用实际握手版本排除证书、SNI 和代理问题。本文给出隔离兼容配置和复查清单。
-
Go HTTP 服务调用 Server.Shutdown 后仍不退出,多半是活动长请求或 hijack 连接没有收到应用级关闭信号。本文按连接状态给出排查、通知与等待方案。
-
Go HTTP 服务端客户端断开后仍有工作运行,重点检查 r.Context 是否传到阻塞操作。本文对比 CloseNotifier、Background 与 Request.Context,给出迁移写法、回归边界和异步任务取舍。
-
Go 提示 x509 未知机构时,服务端证书链齐全并不等于客户端信任。文章区分链材料与信任锚,定位 RootCAs、容器根库及TLS终止点,提供保留系统根并追加受控CA的专用客户端示例,说明安全修复边界。
-
Go HTTP 服务端调用 ResponseController 设置读写 deadline 时,如果返回未支持错误,通常不是 deadline 参数写错,而是当前 ResponseWriter 或包装链没有暴露对应能力。本文说明如何用 errors.Is 判断 ErrNotSupported、修复 Unwrap 包装器,并为不支持连接 deadline 的场景保留安全降级方案。
-
Go HTTP 客户端重试后请求体变空,通常不是服务端随机丢数据,而是复用了已经读过的 Body。本文用 GetBody 和字节快照定位并修复请求体重放问题。
-
ForceAttemptHTTP2 只允许尝试而不强制协商成功。通过完整 HTTPS 诊断示例读取响应 Proto 与 TLS ALPN,区分实际 Transport、Protocols、TLSNextProto、自定义拨号、代理和对端能力,并说明安全修复与回退边界。
-
Go 的 ProxyConnectHeader 只服务于 HTTP 代理的 CONNECT 建隧道请求,不是发往目标站点的普通请求头。本文按代理选择、固定配置、动态回调和证据排查四步定位“请求头缺失”,并解释 GetProxyConnectHeader 覆盖 ProxyConnectHeader 的关键关系。
-
Go log/slog 可以在 Handler 层设置最低日志级别:用 HandlerOptions.Level 固定过滤边界,用 LevelVar 在排障窗口动态调级,再用 Logger.Enabled 避免低级别日志触发昂贵字段计算。本文围绕生产配置、审计边界和发布前复查给出可复用写法。
-
Go log/slog 可以通过 HandlerOptions.ReplaceAttr 统一删除或改写 time、source 等内置字段。本文说明 groups 的层级边界,并用 TextHandler 与 JSONHandler 解释稳定输出方案。
-
通过显式提取 Context 中的请求标识并用 Logger.With 派生请求日志器,为多条 slog 日志复用上下文字段。提供完整 Go 示例,解释 InfoContext、全局默认日志器、字段缺失与重复键的边界。
-
Go database/sql 事务最容易漏掉的是提前返回路径:某个 SQL、业务校验或 context 取消后,如果没有统一 Rollback,事务就可能长期占用连接或留下不完整的控制流。本文用 defer、panic 保护和 BeginTx context 封装一个只在成功出口 Commit 的事务 helper,并用路径指标检查覆盖范围。