-
本文说明 Go http.Request.BasicAuth 的三个返回值,演示如何区分认证头解析成功与账号校验通过,并整理 401、HTTPS、WWW-Authenticate 和日志脱敏边界。
-
Go reflect.Value.FieldByIndex 接收 StructField.Index 这样的字段路径,可读取嵌套或匿名嵌入结构体中的目标字段;遇到可能为空的指针时,应使用 FieldByIndexErr 获取可处理的错误。
-
Go 的 TLSHandshakeTimeout 只负责 HTTPS 客户端 TLS 握手阶段的等待时间。本文用一个自定义 Transport 拆开连接、握手、响应头和响应体的超时边界,并说明如何根据错误现象选择排查方向。
-
Go HTTP Server 读取请求体后响应变慢,常见原因不是 ResponseWriter 本身,而是客户端上传尚未完成、处理器在等待 Request.Body,或 HTTP/1.x 连接仍有未消费的数据。本文用一个带大小限制的上传接口拆分耗时,说明正确读取顺序、连接复用边界和日志定位方法。
-
Go 交叉编译找不到目标系统头文件,通常是 cgo 使用了宿主机编译器,或目标 sysroot、第三方开发包不完整。本文按 cgo 开关、CC、sysroot、pkg-config 和链接阶段给出排查顺序。
-
Go race 主要观察单个进程内 goroutine 对共享内存的并发访问。本文解释跨进程文件、IPC 和数据库问题为什么不会自动产生 race 报告,并给出按共享媒介分层排查的方法。
-
Go t.Cleanup 会在测试及其子测试完成后执行清理函数,同一作用域遵循后注册先调用。本文用资源注册栈、父子测试边界和 defer 对照,说明如何预测释放顺序并安排资源依赖。
-
Go fuzz 测试读取相对路径文件失败,通常不是 fuzz 引擎改变了规则,而是相对路径基准与预期不一致。本文说明 go test 的包目录语义、testdata 夹具布局、fuzz 回调的并发边界,以及 go:embed 和显式绝对路径的取舍。
-
TestMain 控制包级测试入口,错误的 os.Exit 可能覆盖子测试失败状态。本文说明正常返回的退出语义、保留 m.Run 结果的方法,以及辅助函数清理、CI 状态传播和并行子测试的边界。
-
Go 的 GOFLAGS 会把已知命令行参数注入到默认行为中,且可能来自当前 shell 或 go env -w 的持久配置。本文用 go test、go list 和 go env 说明它的来源、覆盖顺序与清理方法。
-
Go 构建在启用 vendor 模式时会从主模块根目录的 vendor 目录取包,不会读取模块缓存中的同名新版本。本文拆开 go.mod、vendor/modules.txt 与 -mod=vendor 的职责,说明如何更新 vendor、如何暂时切回模块缓存,以及怎样判断版本来源。
-
cgo 不会让 Go 构建缓存整体失效。本文区分包编译、外部 C 构建和链接,说明 CI 缓存持久化、工具链固定,以及系统 C 库更新后必须显式失效的边界。
-
解释工作区模式下 go.work replace 覆盖成员模块 go.mod replace 的原因,演示如何确认 GOWORK、匹配规则和最终模块来源,并给出可回滚的修复方法。
-
Go panic 不是另一种 error 返回值,而是会沿当前 goroutine 调用栈展开的控制流。本文说明 panic、defer、recover 与 error 的职责边界,以及如何只在明确边界处恢复并转换为错误。
-
Go gzip.Reader 默认会把拼接的多个 gzip 成员连续解压。本文说明 Multistream(true) 的默认语义,以及怎样用 Multistream(false)、io.ByteReader 和 Reset 按成员读取。