-
Go slog.Logger 处理可选字段时,关键不是把空字符串或零值直接塞进日志,而是先判断字段是否存在,再条件追加 slog.Attr。本文用 LogAttrs、With、分组字段和高频日志路径说明缺失、零值、nil 的区别。
-
Go encoding/hex 的 Dumper 按 hexdump -C 形式把字节写入 io.Writer。若最后一行不足 16 字节,Close 会补齐空白、ASCII 右栏和换行;本文说明 Write、Close、错误处理以及与 hex.Dump 的选择边界。
-
go/build.Context 本身保存构建配置和文件系统回调,不是需要 Close 的资源。本文沿 OpenFile、Import、MatchFile 的调用边界,定位真正未释放的 ReadCloser、文件描述符和外围 goroutine。
-
TCP 是字节流,单次 Read 不保证拿到完整网络帧。本文用 io.ReadFull 读取固定帧头和帧体,结合 binary.BigEndian 解析长度,并说明 EOF、UnexpectedEOF、超长帧和持续连接循环的处理边界。
-
用 Context.Deadline 和 time.Until 计算 Go context.WithDeadline 的有效剩余时间,并区分无 deadline、提前取消、已经超时以及父 Context 更早截止等边界。
-
Go archive/tar 读取软链接时,Header.Name 是归档中的链接名,Header.Linkname 才是目标路径;TypeSymlink 没有普通文件数据体,Reader.Read 返回 EOF 不代表目标文件读取失败。
-
Go testing/synctest 可以在隔离测试气泡内使用虚拟时钟,让定时任务测试不必等待真实秒数。本文用 time.AfterFunc 示例比较真实时间、注入时钟和 synctest,并说明 Test、Wait、Sleep 的边界。
-
Go slices.Collect 可以把 iter.Seq 产出的值收集成新的切片,适合后续索引、排序或重复遍历。本文用可复用的偶数迭代器说明 Go 1.23 及以上版本的最小用法,并解释 nil 空结果、引用型元素的浅拷贝以及何时应继续流式消费。
-
本文说明 Go crypto/subtle.ConstantTimeByteEq 的 uint8 参数、1/0 返回值、最小封装,以及它与 ConstantTimeEq 和 ConstantTimeCompare 的适用边界。
-
Go sync.Cond.Wait 必须在持有 Cond.L 时调用。本文说明 Wait 原子释放与重新加锁的边界、为什么要用 for 重新检查条件,以及状态修改、通知和 channel 选择的实用判断。
-
用%w保留Go crypto/aes初始化错误,通过errors.As识别KeySizeError,区分调用阶段,并设计不泄露密钥的内部诊断和对外提示。
-
Go net/http.Transport结果不稳定时,先区分传输错误、HTTP状态与正文变化。文章说明连接复用和响应体处理误区,给出有界GET诊断示例,并用httptrace记录复用线索。
-
使用 Go crypto/x509 校验证书链时,VerifyOptions.KeyUsages 为空默认按服务器用途处理;为了让配置意图更清楚,可以显式设置 ExtKeyUsageServerAuth,并配合 Roots、Intermediates 和 DNSName 分层排查失败原因。
-
用 Go 的 image.Rectangle.Intersect 计算两个图片边界的共同区域,理解半开区间、空矩形、边界相接和 SubImage 裁剪坐标的处理方式。
-
Go io.LimitReader 会把底层 Reader 的非 EOF 错误原样传回,但达到读取上限时返回的是 EOF,不能直接当作“底层读完”。本文用 io.ReadAll、io.LimitedReader 和 %w 包装讲清错误保留、截断判断与流式读取边界。