Go语言技术文章
-
用 Go testing/fstest.MapFS 构造内存文件,演示 ReadFile 读取指定路径,并用 errors.Is 区分非法路径、文件不存在和正常结果。253 收藏 -
Go testing.T.Errorf 等价于记录格式化错误日志后调用 Fail:当前测试会被标记为失败,但函数仍会继续执行。本文用表格测试说明如何保留多个失败项,并对比 Fatalf 的立即停止边界、前置条件判断和并发调用注意事项。280 收藏 -
Go atomic.Uint32.And 用按位与原子清除指定标志,并返回更新前的完整位图。本文说明 ^mask 的正确写法、组合状态处理和并发边界。111 收藏 -
Go atomic.Uint64.CompareAndSwap 把旧值比较和新值写入绑定为一次原子条件更新。本文对比 Load 加 Store 的竞态,给出一次尝试与带重试的写法,并说明 false、零值、多字段一致性和高竞争边界。423 收藏 -
Go 的 ed25519.PrivateKey 是 64 字节表示,而 RFC 8032 语境里的种子是 32 字节。本文用 PrivateKey.Seed 读取种子,说明如何校验长度、复制敏感材料,以及用 NewKeyFromSeed 重新构造私钥。414 收藏 -
sync.OnceFunc 把无参无返回值函数包装成可并发调用的一次性入口。本文给出对象级初始化示例,解释包装函数应共享、并发调用等待完成、panic 重复传播,以及重试和初始化后修改的边界。359 收藏 -
math/bits.Add64 用两个 uint64 和一个 0 或 1 的输入进位计算固定宽度和,同时返回 sum 与 carry-out。本文从返回值契约讲到两个 64 位字的 128 位加法,说明如何传递低位进位并处理最终溢出。278 收藏 -
Go 中两个 uint32 相乘可能得到 64 位结果,直接用 uint32 相乘只会保留低 32 位。本文结合 math/bits.Mul32 说明 hi、lo 的含义、完整结果的重组方式,以及窄类型乘法最容易出现的误用。201 收藏 -
Go slog.Level.String 会把 DEBUG、INFO、WARN、ERROR 以及它们之间的数值级别转换成可读文本。本文说明自定义偏移、JSON 与文本配置复用规则,以及外部输入和审计记录的边界。138 收藏 -
Go slices.Reverse 会直接交换切片中的元素,不返回新切片。本文说明它的最小用法、命名切片类型、nil/空切片边界,以及需要先复制的别名场景。196 收藏 -
Go maps.Clone 会复制一个新的 map 容器,并在输入为 nil 时保留 nil 语义。本文从配置快照场景说明 nil 与空 map 的区别、顶层修改的独立性,以及嵌套切片仍共享的浅复制边界。179 收藏 -
Go slices.MaxFunc 适合从结构体切片中按自定义比较器挑出一条最高优先级记录。本文给出最小写法,说明比较方向、相等项、空切片 panic 和多字段决策边界。226 收藏 -
Go netip.Addr.Is4In6 专门判断 IPv4-mapped IPv6 地址,也就是 ::ffff:0:0/96。本文结合输入解析和请求来源规范化,说明它与 Is4、Is6、Unmap 的关系,以及 IPv4、映射 IPv6、普通 IPv6 和无效地址的处理边界。320 收藏 -
Go 1.23 新增的 unique.Make 可以把 comparable 值转换成可比较的 Handle,同值输入得到相等句柄。本文从触发信号、最小写法、Value 浅拷贝和边界处理说明怎样使用它,不把唯一化误当成通用缓存。200 收藏 -
Go slices.EqualFunc 用自定义 eq 函数按索引比较两个切片,长度不同直接返回 false,比较器首次返回 false 时停止。本文结合跨类型字段比较,说明比较器签名、空切片边界和副作用控制。394 收藏