-
Go 的 io/fs.WalkDir 适合做跨目录扫描,但权限错误、符号链接和大目录中断都不能靠默认行为猜测。本文用一个可运行的扫描器说明 fs.ValidPath、fs.SkipDir、context.Context 与错误记录如何配合。
-
复用 Go 的 time.Timer 时,Stop 和 Reset 的行为会受到 Go 版本、定时器是否已经到期以及是否存在并发接收的影响。本文用一个超时重试场景拆开旧版本排空规则、Go 1.23 的同步定时器语义和可验证的停机边界。
-
slices.Collect 能把 iter.Seq 变成切片,但空序列的结果、容量预估和重复遍历边界容易被忽略。本文用最小代码拆开收集过程,并给出选择容量策略的判断方法。
-
Go nil map 可以读取、len 和 range,却不能给元素赋值。本文解释 nil map 与空 map 的边界,演示 make 初始化,并排查函数返回值和结构体字段中的初始化遗漏。
-
Go fuzz 最小化输入仍无法复现时,先核对失败日志中的 FuzzXxx/哈希、testdata corpus 路径和参数类型,再排查时间、随机数、全局状态与外部依赖,最后把稳定 corpus 固化为回归测试。
-
Go 的 http.Client 内部依赖 Transport 的连接缓存。本文用一个可复用请求示例说明 Client 生命周期、Response.Body 关闭和连接复用的关系。
-
Go 1.22 引入的 cmp.Or 可以从命令行、环境变量、配置文件和默认值中按顺序取首个非零值。本文用多层配置示例说明泛型约束、零值语义、布尔开关和表达式求值边界。
-
Go x509.SystemCertPool 在 Linux、Windows 和 macOS 上结果不同,原因在于根证书来源和验证路径不同。本文对比 Unix PEM 文件、Windows CryptoAPI、macOS Security.framework 的边界,并给出追加企业 CA、排查容器信任和选择 fallback roots 的稳定写法。
-
Go strings.Builder 的 String 方法返回当前累计内容,后续 Write 是继续修改 Builder,而不是直接修改已经得到的 string。文章解释 Builder 缓冲区与字符串值的边界,并给出单一所有者、禁止复制非零 Builder、并发隔离和按需 strings.Clone 的处理方式。
-
Go 1.23 起,maps.Collect 可以把 iter.Seq2[K,V] 键值序列收集为新的 map。本文从 slices.All 的最小写法讲到自定义 Seq2、重复键覆盖规则,以及 maps.Collect 与 maps.Insert 的选择边界。
-
Go 泛型约束不只是列出可参与运算的类型,还能通过接口嵌入和方法集限制调用者。本文用一个可编译示例拆开类型集、方法集与指针接收者的边界。
-
Go slog.HandlerOptions.AddSource 会让 TextHandler 或 JSONHandler 把日志调用点写入 source 字段,但它需要计算调用栈位置。本文用一个可运行示例说明 source 的来源、包装函数对定位的影响、性能成本与脱敏边界。
-
Go 的 os.Root.OpenInRoot 把文件打开范围限定在指定根目录内。本文用真实代码拆开相对路径、符号链接和错误分支,说明它适合解决什么路径逃逸问题,以及如何验证回退策略。
-
crypto/ecdh.PrivateKey.Bytes 返回私钥的原始编码,适合在明确的密钥序列化边界重新调用 Curve.NewPrivateKey;本文拆开复制语义、曲线长度校验和敏感字节生命周期,避免把原始私钥 bytes 当成通用密钥文件格式。
-
用 Go 1.23 的 iter.Seq 把回调式迭代接入 range,拆清 yield 返回值、break 提前停止和错误传递的边界。