Go语言技术文章
-
Go 测试里的临时目录、数据库连接和后台 goroutine 不该靠测试末尾的一行手工清理。用 testing.TB.Cleanup 注册逆序清理函数,再结合 t.Run 与 t.Parallel 的父子边界,可以让失败测试和并行子测试都回收自己的资源。159 收藏 -
Go 1.23 引入的 unique 包适合把可比较值规范化为可比较的 Handle。本文用一个小型标签池说明 unique.Make、Handle.Value 和垃圾回收之间的边界:句柄要保留多久、为什么比较更轻,以及何时不该把它当成永久缓存。322 收藏 -
go/types.Info.FileVersions 可以告诉静态分析工具每个 ast.File 使用的 Go 语言版本。本文用一组可运行的类型检查代码说明文件版本、Config.GoVersion、Package.GoVersion 的关系,并处理版本缺失、类型错误和未来版本等边界。440 收藏 -
runtime/cgo.Handle 用整数句柄把 Go 值交给 C,再由 Go 通过 Value 取回。本文用一次回调拆开句柄表、Delete 时机、失效句柄和 Go 指针规则,帮助你判断什么时候该用 Handle。278 收藏 -
Go 的 container/heap 允许在队列元素优先级变化后用 heap.Fix 恢复堆序。本文从 heap.Interface 的索引维护出发,拆解 Fix、Remove 与 Pop 的边界,给出可运行的可变优先队列示例。467 收藏 -
用 Go 的 math/big.Int.FillBytes 把大整数写入固定长度的大端字节字段,理解绝对值、左侧补零和容量不足 panic 的边界,并给出可验证的协议字段校验写法。241 收藏 -
Go 的 parser.SkipObjectResolution 会跳过已经过时的语法级对象解析,减少解析阶段的 CPU 和内存开销。本文用 ParseFile、ast.File 和 go/types 的最小示例说明它保留什么、舍弃什么,以及何时必须补上类型检查。310 收藏 -
Go 泛型约束里的类型集和方法集不是一回事。本文用 Number、Stringer、Format 三个真实标识符说明为什么 T 不能随意调用方法,以及如何选择收窄约束、显式转换或交给 fmt 处理。333 收藏 -
Go 的 html/template.URLQueryEscaper 适合把模板参数放进 URL 查询值,但它不是多值参数构造器。本文对照空格、加号、& 和 url.Values.Encode 的输出,给出可复核的写法与边界。441 收藏 -
用 sync/atomic 的 atomic.Uint64.And 原子清除状态位,理解它返回旧值的语义、与 Load 的配合方式,以及何时应改用 CompareAndSwap。428 收藏 -
用 bytes.CutPrefix 处理协议前缀,验证前缀命中、空前缀、未命中和返回切片共享等边界,避免手写切片下标时误判输入。142 收藏 -
Golang · Go教程 | 1个月前 | 标准库 · Go教程 · database/sql · 类型转换 数据库驱动 Go 1.27 database/sql.ConvertAssign Rows.Scan
Go 1.27 新增 database/sql.ConvertAssign,把 Rows.Scan 使用的常见值转换逻辑提供给数据库驱动。本文用一个驱动扫描场景拆开源值、目标指针、类型错误和 NULL 边界,说明如何复用转换规则而不把驱动实现写成一套私有规则。281 收藏 -
用 math/rand/v2.ChaCha8 固定种子复现实验结果,解释 Uint64 与 Read 的读取边界、并发隔离方式,以及 MarshalBinary 状态保存与恢复。200 收藏 -
Go 1.23 的 slices.Chunk 可以把切片按批次遍历。本文比较手写下标循环、slices.Chunk 与复制切分的适用边界,重点说明子切片共享底层数组、容量被裁剪以及 n 参数的校验方式。418 收藏 -
用 Go 的 net/netip 解析 CIDR 配置并校验客户端地址,重点看 Prefix.Contains 的地址族边界、ParsePrefix 错误处理与 PrefixFrom 的掩码差异。250 收藏