Go语言技术文章
-
Go math/rand/v2.ChaCha8 使用固定的 [32]byte 种子即可复现伪随机序列。本文说明 NewChaCha8、Seed、Uint64、Read 的配合方式,并区分测试回放与 crypto/rand 的安全用途。387 收藏 -
解释 Go go:generate 的固定执行目录规则,区分包内相对路径与仓库根目录参数,并给出 -root 方案让多包代码生成不依赖调用者当前目录。387 收藏 -
围绕 Go crypto/mlkem 的 EncapsulationKey、DecapsulationKey、Encapsulate 和 Decapsulate,说明公钥封装与私钥解封装的角色边界、返回值和版本注意事项。387 收藏 -
解释 Go 中 len、rune 与 uniseg 字素簇计数的差异,给出组合音标、国旗和 ZWJ emoji 的处理方式,以及面向用户截断和长度限制时的选择建议。387 收藏 -
Go io.ReadFull 会尽力读满固定长度的缓冲区。本文区分完整读取、起始 EOF 和半帧 ErrUnexpectedEOF,并给出定长消息封装写法。387 收藏 -
讲清 Go slices.Chunk 的尾组长度、空输入、非法 n、容量裁剪和底层数组别名,给出适合批量消费的判断方法。387 收藏 -
Go errors.Join 适合把多个可选字段的校验错误合并成一个可检查的错误树。本文用请求补丁示例说明 nil、errors.Is、errors.As、输出顺序和不适用场景。387 收藏 -
用 Go 的 net/netip 判断地址是否属于指定网段:先解析 Addr 和 Prefix,再调用 Prefix.Contains,同时处理解析错误、IPv4/IPv6 匹配与非规范 CIDR 边界。387 收藏 -
go/types.Info.Types 里的 TypeAndValue 同时描述表达式类型和常量值。Value 为 nil 通常只说明表达式不是编译期常量,并不表示 Type 缺失。本文用 AST 分析示例区分 Type、Value、IsValue 和 IsNil。387 收藏 -
Go 的 database/sql 使用 QueryRow 查询单行时,真正的错误要到 Scan 才返回。本文说明如何用 errors.Is 判断 sql.ErrNoRows,并区分空结果、字段 NULL、查询失败和多行结果等边界。386 收藏 -
Go encoding/csv Reader.ReuseRecord 可以让流式读取复用记录切片,减少短生命周期分配。本文解释默认行为、只读当前行的低分配写法,以及保存记录时为什么必须复制切片。386 收藏 -
Go 的 norm.NFD 会把预组装字符转换为基础字符与组合附加符。本文从 String、AppendString、Bytes 讲到 Reader、Transform 和边界处理,说明如何拆分组合字符,以及为什么它不等于去重音或按用户感知字符分割。386 收藏 -
go-diff 的 PatchApply 不只返回修改后的文本,还会返回每个补丁是否匹配成功的布尔数组。本文说明如何生成、序列化、解析并应用补丁,以及为什么部分失败时不能只看最终字符串。386 收藏 -
解释Go Bloom过滤器命中只表示可能存在的原因,提供命中后查询精确map的示例,并说明否定结果的同步前提、容量取舍与误判指标的解释边界。386 收藏 -
Go expvar.Map 可以把按接口、缓存或队列维度拆分的统计值组织成一个指标映射,再用 Publish 注册到 expvar 全局变量表。本文说明 Add、Set、Get、Delete 与 Publish 的职责边界,以及并发更新和键名设计要点。385 收藏