Go问答技术文章
-
Golang · Go问答 | 2个月前 | 性能排查 · net/http · HTTP客户端 · Go问答 · 连接复用 keep-alive http.Transport Response.Body Go HTTP Client
Go 服务的请求量并不高,客户端却不断新建 TCP 连接时,先看 Response.Body 是否在所有分支读到 EOF 并关闭。Go 官方文档说明,Body 未同时读完和关闭时,底层 Transport 可能无法复用持久连接。本文从一次连接数异常的现场出发,给出定位、修复和边界判断。241 收藏 -
用 Go 的 crypto/rand.Text 替换自写随机字符串时,先确认 Go 版本,再处理字符集、长度、错误边界和回归测试,避免把 math/rand 误用于邀请码或令牌。241 收藏 -
Go 泛型函数的类型推导主要依赖调用实参与函数形参之间的类型关系,不能根据接收返回值的变量类型倒推。本文用无参数泛型工厂说明失败原因,并给出显式类型实参和增加 typed 参数两种 API 设计方案。241 收藏 -
Go 1.20 让 any 可以满足 comparable,但接口动态值仍可能让 == 在运行时 panic。本文区分严格可比较、约束满足和动态值检查,帮助设计安全的泛型比较 API。241 收藏 -
Go 1.25 的 trace.FlightRecorder 适合捕获长时间运行服务中的短暂性能异常。本文从缓冲窗口、触发快照、go tool trace 分析和并发边界入手,说明什么时候该用它,以及如何控制内存和文件大小。240 收藏 -
Go module 的 pseudo-version 中间 14 位是修订创建时间的 UTC 表示,不是 author time。本文拆解基准版本、时间戳和提交哈希,并用 go list -m -json 核对实际依赖。240 收藏 -
讲清 Go json.Decoder.Token 如何用嵌套深度定位连续 JSON 流中的对象边界,并说明什么时候应改用 Decode 保留完整字段内容。240 收藏 -
Golang · Go问答 | 2星期前 | go · 数据库连接池 · 故障排查 · database/sql · Go database/sql Rows提前退出 Go Rows关闭连接 database/sql提前退出 Go Rows.Err排查 Go查询结果集释放
Go database/sql 查询只取部分结果时,Rows 不能只依赖循环自然结束。本文用一个短生命周期函数说明如何关闭 Rows、保留 Scan 错误并检查 Rows.Err,帮助排查连接池占用不回落。240 收藏 -
csv.Reader 开启 ReuseRecord 后,连续 Read 可能共享上一条记录的底层数组,因此保存旧切片会看到内容变化。本文用对比示例说明何时可以直接复用、何时必须复制,以及缓存和 goroutine 场景的安全写法。240 收藏 -
Go Header 的值是字符串切片:Set 会替换旧值,Add 会追加新值。本文从键名规范化、单值与多值字段、重复写入来源和 Values 检查四个角度说明如何选择方法并排查重复字段。240 收藏 -
自定义断言函数不调用 testing.TB.Helper 时,测试失败位置常常落在断言库内部,排查成本很高。本文用一个最小断言函数说明 Helper 如何改变失败行号、为什么要放在函数入口,以及在 TB 接口、子测试和并发调用中的边界。239 收藏 -
Go recover 不能跨 goroutine 捕获 panic。本文用一个 panic-safe worker 小项目说明控制栈作用域、直接 deferred recover、error channel 与 WaitGroup 的正确组合。238 收藏 -
Go http.NewRequest 传入 nil Body 后 ContentLength 为零是正常语义:nil 表示没有请求体,零值不能单独证明 Body 一定为空。本文对比 nil、http.NoBody、已知长度 Reader 和未知 Reader 的边界。238 收藏 -
Go 的 range 接收循环不会因为暂时没有值就结束,必须等 channel 被关闭并且关闭前发送的值全部取出。本文说明关闭责任、双值接收、nil channel、缓冲 channel 和多发送方协调的边界。238 收藏 -
Go init 函数一多,启动顺序难查通常不是 init 本身失控,而是包级变量依赖、文件呈现顺序和隐藏副作用混在了一起。本文给出依赖定位、显式构造和重构检查方法。238 收藏