Go语言技术文章
-
用 httptest.NewServer 搭建三段重定向链,演示默认客户端跟随、CheckRedirect 记录每一跳,以及 ErrUseLastResponse 停止跟随时的断言和 Body 清理。240 收藏 -
Go module 的 pseudo-version 中间 14 位是修订创建时间的 UTC 表示,不是 author time。本文拆解基准版本、时间戳和提交哈希,并用 go list -m -json 核对实际依赖。240 收藏 -
Go 的 math/big.Int.SetString 通过第二个参数 base 指定进制:固定格式传明确进制,带 0b、0o、0x 前缀的输入可传 0 自动识别。本文说明返回值、下划线和不可信输入的处理边界。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 1.20 的 errors.Join 可以同时保留主流程错误和多个资源清理错误,自动忽略 nil,并让 errors.Is、errors.As 继续遍历全部子错误。本文给出 defer 与集中清理两种实用写法。240 收藏 -
Go Header 的值是字符串切片:Set 会替换旧值,Add 会追加新值。本文从键名规范化、单值与多值字段、重复写入来源和 Values 检查四个角度说明如何选择方法并排查重复字段。240 收藏 -
go/ast.Preorder 从 Go 1.23 开始返回 iter.Seq[ast.Node],适合用 range 按深度优先顺序读取语法树。本文用一个真实的 AST 分析小工具说明如何解析源码、按节点类型筛选、在找到目标后自然停止,并比较 Inspect 的控制方式。239 收藏 -
自定义断言函数不调用 testing.TB.Helper 时,测试失败位置常常落在断言库内部,排查成本很高。本文用一个最小断言函数说明 Helper 如何改变失败行号、为什么要放在函数入口,以及在 TB 接口、子测试和并发调用中的边界。239 收藏 -
embed.FS 读取静态资源时,文件路径必须遵守 io/fs 的相对路径规则。本文用 assets/ 与模板读取场景说明路径前缀、fs.ValidPath 和 fs.Sub 的边界,给出可复用的校验与测试写法。239 收藏 -
Go 数据竞争往往不是每次都能复现。本文用 go test -race 接入高覆盖测试,并从读写访问栈和 goroutine 创建栈定位共享状态边界,最后给出修复后的复测清单。239 收藏 -
Go testing.T.Cleanup 回调 panic 不会被静默忽略。本文说明清理时机、后进先出顺序、测试主体 panic 与 cleanup panic 的区别,并给出用 t.Errorf、局部 recover 和 go test 排查重复清理与并发边界的写法。239 收藏 -
Go 自定义错误可实现 Is(error) bool,将多个动态错误码映射为稳定错误族。本文用可重试与资源不存在示例说明浅比较、错误包装和表驱动测试。239 收藏 -
介绍 Go cmp.Or 如何按从左到右的顺序返回第一个非零候选值,并通过配置覆盖示例说明零值语义、comparable 类型约束与不适用边界。239 收藏