Go语言技术文章
-
Go 原生 fuzzing 会把种子输入和失败输入保存为语料库。本文说明如何使用 F.Add 与 testdata/fuzz 管理语料,并用 go test 和 -run 复现指定输入。194 收藏 -
Go 1.24 引入的 testing.B.Loop 能自动控制基准计时边界,并降低 b.N 循环中 setup、cleanup 和结果被优化掉的风险。本文用一个字符串统计小项目说明写法、迁移要点和不能混用的边界。302 收藏 -
Go 1.24 的 testing.T.Context 会在测试完成、Cleanup 执行前取消。本文从后台 goroutine 未退出的故障现象出发,说明如何传递 t.Context、响应 Done,并用 Cleanup 等待任务收尾。160 收藏 -
Go testing.T.Setenv 会在测试清理阶段恢复环境变量。本文说明父子测试的设置层级、串行子测试的隔离写法,以及 t.Parallel 与进程级环境变量的冲突边界。184 收藏 -
testing.T.Name 会返回当前测试或子测试的完整名称,嵌套 Run 使用斜杠连接层级,重复兄弟名称会自动追加序号。本文用表格驱动测试说明如何读取、记录和正确使用这个名称。397 收藏 -
Go os.OpenFile 配合 O_CREATE 和 O_EXCL,可以把文件不存在检查与创建合并成一次独占操作。本文说明先检查再创建的竞态、已存在错误的判断、写入收尾和不同文件创建策略的选择。294 收藏 -
Go errors.As 可以沿着 %w 形成的错误链查找目标类型,并把匹配到的错误写入目标变量。本文说明多层包装、指针目标、首次匹配和自定义 As 方法的正确用法。319 收藏 -
Go crypto/ecdh.PublicKey.Bytes 会返回公钥编码的副本,适合放入协议字段或持久化格式;接收端应使用同一曲线的 NewPublicKey 重新解析,并用 Equal 与 Curve 区分对象相等和曲线匹配。本文给出最小写法、错误处理和常见边界。237 收藏 -
Go netip.Prefix.IsSingleIP 用来判断一个 CIDR 前缀是否只包含一个 IP。本文结合 IPv4、IPv6、PrefixFrom、IsValid 和 Masked,说明如何把单地址判断接入路由与访问控制,并避开未掩码地址位和非法前缀的误区。165 收藏 -
Go 标准库 ServeMux 可以在路由模式中声明 {id} 等命名通配符,再用 Request.PathValue 读取。本文说明单段与尾通配符的区别、空字符串边界,以及直接测试处理器时如何用 SetPathValue 准备参数。213 收藏 -
Go sync.Map.CompareAndSwap 会先比较 key 对应的旧值,只有当前值与 old 相等时才替换为 new。本文用状态更新示例说明返回值、并发重试、可比较类型和与 Store、Swap 的区别。426 收藏 -
sync.Pool 适合复用可丢弃的临时对象,但不适合保存业务状态或稳定资源。本文从对象生命周期、New/Get/Put 闭环、清空语义、容量风险和基准数据五个角度,判断一个对象是否真的值得池化。370 收藏 -
Go netip.Prefix.Bits 直接返回 CIDR 前缀长度,合法范围取决于 IPv4 或 IPv6 地址族;无效 Prefix 返回 -1。本文用 ParsePrefix、PrefixFrom 和 Masked 说明读取、校验与地址规范化的边界。188 收藏 -
Go math/rand/v2.ChaCha8 使用固定的 [32]byte 种子即可复现伪随机序列。本文说明 NewChaCha8、Seed、Uint64、Read 的配合方式,并区分测试回放与 crypto/rand 的安全用途。387 收藏 -
Go big.Int.SetString 解析大整数时需明确进制并检查成功标志。本文说明十进制与自动进制的差异、失败时接收者状态,以及临时对象提交和独立副本的用法。228 收藏