Go语言技术文章
-
Go sync.OnceValue 把一次延迟计算封装成可并发调用的函数,后续调用共享同一结果。本文说明它的基本写法、错误与 panic 边界,以及为什么刷新数据必须重建闭包。496 收藏 -
通过ParseAddr与IsUnspecified区分0.0.0.0、::和零值Addr,给出解析错误处理、状态对照表与配置记录模型,避免将无效值误判为普通有效IP。242 收藏 -
Go strconv.AppendQuote 会把字符串字面量直接追加到 []byte 缓冲区。本文说明如何复用 dst、处理转义膨胀,并判断容量不足时仍可能发生的扩容。187 收藏 -
Go math/bits.RotateLeft64 用固定 64 位宽执行循环左移,负移位量表示向右旋转,超过 64 的移位量按整圈归一化。本文对比普通左移丢弃高位的差异,并给出固定边界用例。285 收藏 -
Go unicode/utf8.FullRune 用来判断字节切片开头是否已经收齐一个 UTF-8 编码。本文用分块读取场景说明它与 DecodeRune、Valid 的边界、尾部残片和错误字节处理方式。155 收藏 -
Go 判断链路本地 IP 时,可以先用 netip.ParseAddr 解析文本,再调用 Addr.IsLinkLocalUnicast。本文用 IPv4、IPv6 和带 zone 的 IPv6 示例说明返回值,并区分私有、回环、组播和无效地址。443 收藏 -
Go mime/multipart 的 NextRawPart 用于按顺序读取 multipart 的原始 part。本文从 boundary 解析、EOF 判断、流式保存和 quoted-printable 边界说明调用方式,并区分它与 NextPart 的行为。178 收藏 -
Go math/big.Int 的 Append 方法会把整数按指定进制的文本表示追加到已有 []byte 缓冲区。本文说明缓冲区复用、进制与前缀、负数和 nil 边界,并对比 Bytes 与 FillBytes 的二进制语义。296 收藏 -
Go log/slog 可以用 GroupAttrs 把动态收集的 slog.Attr 放进命名属性组。本文从字段资产、属性收集、空组名、WithGroup 和 ReplaceAttr 的边界入手,说明怎样让日志结构清晰,同时避免把分组误当成脱敏措施。180 收藏 -
通过AddSource与ReplaceAttr控制Go slog日志的源码信息,展示短文件名与删除source的写法,说明Handler绑定、封装调用点和定位成本之间的取舍。454 收藏 -
Go hash/maphash 适合为当前进程内的字符串或字节键计算 uint64 哈希。本文从 Seed 的归属、String 与 Bytes 的选择、复合键规范化和并发边界入手,说明哪些结果可以用于分桶和索引,哪些用途不应依赖。330 收藏 -
用 http.NewServeMux 创建独立路由表,注册固定路径和 Go 1.22+ 方法模式,再把 mux 显式交给 http.Server,避免测试或多服务场景误用全局 DefaultServeMux。175 收藏 -
Go archive/tar 当前没有公开的 Reader.WriteTo 方法。本文解释源码内部 writeTo 与 Reader.Read 的差异,说明稀疏文件空洞为何会表现为 NUL 字节,并给出普通解包与额外恢复层的边界判断。317 收藏 -
Cmd.Environ 返回命令按当前配置运行时使用的环境副本。本文用一个小型命令行示例说明 Dir、Env、PWD、重复键和执行结果之间的关系。176 收藏 -
filepath.Localize 用于把 io/fs 约定的 slash 分隔路径转换为当前操作系统路径。本文通过 Go 示例说明输入契约、错误边界,以及它和 FromSlash、ToSlash 的区别。159 收藏