-
Go 把 typed nil 指针放进 interface 后,接口本身通常已经带有动态类型,因此直接与 nil 比较不会得到 true。本文从 error 返回场景复现原因,再给出源头修复、类型断言和受限反射三种判空方案。
-
解释 Go compress/flate.Writer 在 Close 后再次 Write 返回 flate: closed writer 的原因,区分底层 I/O 错误,并给出 Reset 与重新创建 Writer 的选择。
-
Go 依赖出现 go.sum 校验不一致时,先区分 .mod 与源码 zip 的哈希,再记录 GOPROXY、GOSUMDB 和 GOPRIVATE,用同一模块版本对比代理与 direct,最后按来源修复而不是盲目删除 go.sum。
-
Go 老客户端连接失败时,先对照客户端 MaxVersion 与服务端 MinVersion,确认双方是否存在 TLS 版本交集,再用实际握手版本排除证书、SNI 和代理问题。本文给出隔离兼容配置和复查清单。
-
Go database/sql 的 WaitCount 持续增加,不一定代表连接池正在持续恶化,因为它是累计等待次数。本文用 WaitDuration、OpenConnections、InUse 和 Idle 的时间差判断真实争用,再从连接上限、查询占用和资源归还三个方向选择修复方案。
-
Go HTTP 服务端按 Accept-Encoding 协商 gzip 响应,正确处理 Content-Encoding、Vary、响应头时机和 gzip.Writer 关闭顺序。
-
Go 工具链遇到 compile、asm 或 vet 找不到、版本不一致时,可以先用 go env GOTOOLDIR 查看当前 go 命令实际使用的编译工具目录。本文区分 GOTOOLDIR、GOROOT、GOBIN 与 PATH,给出本地和 CI 中可复制的只读排查方法。
-
Go 通过握手后的 ConnectionState.LocalCertificate 读取本地证书链。本文区分本地与对端证书,提供 DER 解析与指纹记录示例,说明恢复会话空链、多证书配置和证书轮换的观测边界。
-
Go 模块联调时,可用 go mod edit -replace 将已 require 的依赖临时指向本地目录。本文说明本地路径、module 路径、版本范围、验证命令和清理步骤,避免替换不生效或把本地配置提交到仓库。
-
裸 IPv6 不等于主机加端口。说明 SplitHostPort 的方括号要求,用分字段校验示例正确组装端点,并区分 IP、域名、数字端口和 URL 的输入边界。
-
Go os.Root.OpenFile 可以把文件名解析限制在已打开的根目录下。本文说明如何创建工作区 Root、按相对路径读写文件、选择 flag 与 perm,并处理越界路径、非法权限位和资源关闭问题。
-
围绕 encoding/binary.ByteOrder.Uint64 讲清固定 8 字节 uint64 的读取方式、BigEndian 与 LittleEndian 选择、NativeEndian 边界,以及连续记录和短输入的安全处理。
-
context.Cause 返回的 error 不能只靠字符串判断。本文从取消信号的生命周期出发,说明如何用 ctx.Err() 判断标准状态,用 errors.Is 和 errors.As 判断自定义原因,并区分主动取消、超时和父级传播。
-
Go database/sql.DB.Stats 返回的是连接池累计与瞬时状态。本文说明如何读取 InUse、Idle、WaitCount 和 WaitDuration,用连续采样计算等待窗口,并区分连接池触顶与数据库服务器慢查询。
-
Go Timer 配合 Stop 要区分新旧通道语义。本文说明陈旧事件、排空前提与单一消费者写法,给出完整示例和迁移清单,避免把 false 误当成通道有值。