-
解释 Go runtime.KeepAlive 为什么要紧跟系统调用放置,帮助排查 finalizer 过早关闭文件描述符导致的偶发 EBADF。
-
Go encoding/xml 遇到属性和子元素同名时,不要复用一个字段。用不同 Go 字段分别标记 xml:"code,attr" 和 xml:"code",即可让 Unmarshal 与 Marshal 清晰区分两种 XML 来源。
-
Go encoding/xml 解码 XML 时,前缀只是文档别名。本文用 xml.Name.Space 和 Local 说明如何按命名空间 URI 稳定判断元素,并比较 Token 级解析与结构体标签的适用边界。
-
用 Go 的 encoding/xml 流式读取 XML 时,EndElement 不是靠字符串猜测匹配。本文用 xml.Name 栈解释嵌套结束标签、自闭合标签、命名空间和 io.EOF 的判断方式。
-
Go JSON 指针字段设为 nil 后仍输出,通常是因为标签没有 omitempty,nil 会被编码为 null。本文从最小结构体、标签检查、接口契约和自定义 MarshalJSON 四个方向定位原因。
-
讲清 Go json.Decoder.Token 如何用嵌套深度定位连续 JSON 流中的对象边界,并说明什么时候应改用 Decode 保留完整字段内容。
-
讲清 Go json.Decoder 开启 DisallowUnknownFields 后的未知字段错误,给出按 API 版本分流严格与兼容解码、检查尾部数据、记录迁移和逐步收紧的实用方案。
-
Go 程序明明访问 HTTPS,结果却一直使用 HTTP/1.1,排查时不要只盯着 ForceAttemptHTTP2。本文按客户端声明、TLS 握手选择和 HTTP 实际协议三个层次,说明应记录的字段、常见冲突以及最小复现代码。
-
Go x509.SystemCertPool 在 Linux、Windows 和 macOS 上结果不同,原因在于根证书来源和验证路径不同。本文对比 Unix PEM 文件、Windows CryptoAPI、macOS Security.framework 的边界,并给出追加企业 CA、排查容器信任和选择 fallback roots 的稳定写法。
-
Go 的标准 Transport 会负责关闭客户端 Request.Body,但连接复用更容易受 Response.Body 未读取和未关闭影响。本文用请求示例拆开两种 Body 的责任边界。
-
GOAMD64 等级不匹配时,先区分 GOOS/GOARCH 与 amd64 微架构要求,再按部署机器的最低能力选择 v1 到 v4。本文给出排查表、构建命令和发布清单,避免高等级产物在旧 CPU 或受限虚拟机上启动失败。
-
Go 交叉编译默认关闭 cgo,CGO_ENABLED=0 还会排除 import C 的文件。本文用构建约束、CC 交叉编译器和验证矩阵说明哪些功能会消失,以及如何安全选择纯 Go 或 cgo 方案。
-
Go 的 cgo 文件能否被识别,取决于 CGO_ENABLED、import C、同包目录、GOOS/GOARCH 和 go:build 约束。本文用 go list -json 查看 CgoFiles、CFiles 与 IgnoredGoFiles,定位文件未参与构建的具体层级。
-
Go 文件是否参与编译,不只看 //go:build,也要把 _GOOS、_GOARCH 或组合后缀带来的隐含条件一起判断。本文用 go list 区分 GoFiles 与 IgnoredGoFiles,并说明 -tags、gofmt 和 _test.go 的边界。
-
Go generate 不会自动在 go test 前运行,这是 Go 工具链有意保留的职责边界。本文从 //go:generate 指令、生成文件和测试入口的关系出发,说明如何用显式命令或 CI 脚本稳定编排生成与测试,并排查生成缺失、版本漂移和失败传播问题。