Go语言技术文章
-
Go log/slog.Logger 减少临时分配的关键不是盲目复用对象,而是让日志调用尽早走 Attr 路径:优先使用 LogAttrs 和类型化 Attr,把稳定上下文交给 With 预处理,只对昂贵参数做 Enabled 预判断。本文结合调用路径、属性复用和适用边界说明具体写法。417 收藏 -
说明 maps.Clone 对缺失键、零值和显式 nil 的保留方式,提供整数指针配置草稿复制写法,并比较浅拷贝、定制复制及并发所有权约束。113 收藏 -
Go slog.Logger 处理可选字段时,关键不是把空字符串或零值直接塞进日志,而是先判断字段是否存在,再条件追加 slog.Attr。本文用 LogAttrs、With、分组字段和高频日志路径说明缺失、零值、nil 的区别。170 收藏 -
Go log/slog.Logger 记录错误时要给 error 一个稳定的属性名,并补充操作和资源上下文。本文说明 !BADKEY 的原因、TextHandler 与 JSONHandler 的呈现边界,以及用 LogValuer 输出结构化错误字段的方法。428 收藏 -
Go io.LimitReader 会把底层 Reader 的非 EOF 错误原样传回,但达到读取上限时返回的是 EOF,不能直接当作“底层读完”。本文用 io.ReadAll、io.LimitedReader 和 %w 包装讲清错误保留、截断判断与流式读取边界。160 收藏 -
用 io.LimitReader 约束读取配额,以 io.CopyBuffer 和独占缓冲减少整段临时存储,说明专用复制接口、超限判定与并发复用的边界。302 收藏 -
Go io.LimitReader 适合限制可选字段本次最多读取的字节数,但它不会自动判断字段是否完整。本文用存在标记和长度前缀示例,说明如何配合 io.ReadFull 处理字段不存在、长度超限和 io.ErrUnexpectedEOF。171 收藏 -
Go io.Pipe 是同步且无内部缓冲的管道,一次 Write 可能由一次或多次 Read 完成。本文用读缓冲区大小、n 返回值和阻塞条件说明怎样判断读写边界。315 收藏 -
sync.OnceValue 只返回一次计算得到的 T,不会自动告诉调用方初始化是否已经发生。当 0、空字符串或 nil 也是合法业务结果时,应把 value、ready 或 err 放进同一个返回结构中,再由 OnceValue 统一缓存。278 收藏 -
使用 Go archive/tar.Writer.WriteHeader 写入目录 Header 时,关键是设置 tar.TypeDir、规范 Name,并把目录视为无数据体条目;随后再通过新的 Header 写入目录中的普通文件。243 收藏 -
Go fmt.Appendf 可以把格式化结果直接追加到已有 []byte,减少 fmt.Sprintf 先生成字符串再 append 的中间路径。本文从缓冲区复用、容量准备、专用追加函数和基准测试讲清适用边界。329 收藏 -
fmt.Appendf 可以把错误的可读文本追加到 []byte,但不能像 fmt.Errorf 的 %w 那样保留可追踪的错误链。本文用日志、协议缓冲和 Writer 场景说明两者如何配合。431 收藏 -
errors.Join 本身会为非 nil 错误建立 joinError 和精确容量的错误切片。本文说明如何在调用方预分配并复用收集空间、把 Join 推迟到边界、避免循环内重复格式化,并区分可减少的临时分配与不可省略的聚合成本。432 收藏 -
Go net.IP.Mask 会把 IP 地址与 IPMask 按字节做按位与,把主机位清零得到网段地址。本文从 IPv4、IPv6 的掩码构造讲到 ParseCIDR、nil 结果和 IPv4 映射地址边界,帮助你稳定生成网段键。111 收藏 -
通过显式存在性判断处理Go fmt.Appendf可选字段,保留空串、零值和false,管理分隔符及返回切片,并说明文本格式与JSON编码的区别。303 收藏