-
Go http.Transport 的 MaxIdleConnsPerHost 控制每个主机保留的空闲 keep-alive 连接数,不等于并发总数或所有主机总量。本文区分相关字段,并给出长期复用 Transport 的配置方式和连接复用排查路径。
-
Go 客户端响应体读不到,通常不是一个原因:可能请求本身失败、Body 已经被消费、响应按协议没有内容,或读取过程中发生了错误。本文用 net/http 的真实返回关系拆开排查,并给出文本与 JSON 都能复用的读取写法。
-
Go AddDate会对不存在的目标日期进行归一化,而非自动截到月末。本文比较日历偏移、月末截断与固定时长,给出CivilDate实现,并说明账期锚点、闰年和时区边界。
-
从时区形态、layout 占位符、Parse 与 ParseInLocation 的区别入手,定位 Go 时间字符串解析失败,并给出稳定的选择规则。
-
Go encoding/json 默认会忽略结构体中没有对应字段的 JSON key。本文说明 Decoder 的未知字段边界、结构体匹配规则,以及如何用 DisallowUnknownFields 显式启用严格解析。
-
Go 的 JSON 数字进入 interface{} 后默认会解码为 float64。本文解释原因,并用结构体、Decoder.UseNumber 和 json.Number 给出固定字段与动态字段的处理方案。
-
讲清 Go strconv.ParseInt 的 bitSize、ErrRange、ErrSyntax 与 NumError 返回边界,示范如何用 errors.Is、errors.As 和 %w 保留可判断的错误信息。
-
Go 工具链遇到 compile、asm 或 vet 找不到、版本不一致时,可以先用 go env GOTOOLDIR 查看当前 go 命令实际使用的编译工具目录。本文区分 GOTOOLDIR、GOROOT、GOBIN 与 PATH,给出本地和 CI 中可复制的只读排查方法。
-
Go 中接收方直接关闭数据 channel,会让仍在发送的 goroutine 遇到 send on closed channel panic。本文从关闭语义、channel 所有权、done 停止信号和多生产者协调四步,给出可落地的退出协议。
-
Go 项目出现 vendor inconsistent 时,通常是 go.mod、vendor/modules.txt 或 go.work 与 vendor 目录不同步。本文按单模块和 workspace 两种情况给出恢复命令,并解释 replace、显式依赖和 -mod 选择。
-
Go 测试临时目录在 Windows 清理失败,应先排查文件句柄、后台任务退出和 Cleanup 顺序。本文用完整测试示例说明停止与完成信号,明确 TempDir 自动删除的职责边界。
-
Go HTTP 客户端连接复用异常时,先检查 resp.Body 是否读到 EOF 并及时关闭,再用 httptrace.GotConn 的 Reused 字段观察 Transport 是否复用了连接。本文给出集中式读取模板、状态码场景和异常边界。
-
Go module graph 出现同一模块多个版本时,不能只看 go.mod。本文用 go mod graph 追踪依赖边,再用 MVS、go list -m all、go mod why -m 和 replace、exclude、go.work 边界判断最终 selected version。
-
Go 文件没有参与编译时,不要先反复清理缓存。用 go env 和 go list -json 查看当前模块、平台、构建标签以及 GoFiles、IgnoredGoFiles,再按文件名后缀、//go:build 和 -tags 修正文件选择条件。
-
Go cgo 构建遇到 undefined symbol 时,先用 go build -x 找到实际链接输入,再按 -L 搜索路径、-l 库名、依赖顺序和 pkg-config 逐项定位。本文只讨论 #cgo LDFLAGS 与链接器输入。