Go语言技术文章
-
用 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教程 | 3星期前 | 标准库 · 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 收藏 -
面对字段层级不固定、又不适合一次性读入内存的 JSON,Go 的 encoding/json.Decoder.Token 可以逐个读取语法令牌。本文用对象中嵌套数组的例子说明流式游标、json.Delim、dec.More 与提前结束时的错误边界。193 收藏 -
Go 的 ServeMux 已经能按方法、主机和路径匹配请求,Request.Pattern 可以把最终命中的模式带进日志。本文用一个最小路由示例比较精确路径、通配符和方法匹配,并说明空 Pattern 的边界。452 收藏 -
SetMemoryLimit 和 GOMEMLIMIT 都是在约束 Go 运行时内存预算,但它们不是硬性进程上限。本文用一个可复测的小程序说明 GC 频率、HeapReleased 与外部内存的边界,并给出压测和容器部署中的核对方法。473 收藏 -
围绕 Go net.Conn 写入超时排查一个常见误区:SetWriteDeadline 只约束当前连接的 I/O 截止时间,还要正确处理 n、err、缓冲写入和连接复用,才能判断请求是否真正收口。501 收藏 -
用 filepath.WalkDir 编写一个目录清单工具,展示如何通过 DirEntry 判断目录并返回 SkipDir 剪枝,避免遍历缓存、构建产物等无关目录。158 收藏