-
Go 1.23 起可用 unique.Make 规范化可比较值。本文用重复标签对象示例说明如何保存 unique.Handle[string]、在热路径比较句柄、在输出边界取回 Value,并解释何时不该使用。
-
docker init 能快速生成 Go 项目的 Dockerfile、compose.yaml 和 .dockerignore,但生成结果只是起点。本文按构建版本、主程序路径、端口、运行用户和敏感文件五个边界,给出一份可落地的修改清单。
-
Go 的 slog.HandlerOptions.ReplaceAttr 会在 TextHandler 或 JSONHandler 输出前接收每个非 Group 属性。把 groups 与 Key 组合成完整路径后,可以集中执行全量替换、局部掩码或返回零 Attr 删除字段,并用缺失断言验证敏感原文没有进入日志。
-
slog.WithGroup 应该承担稳定的命名空间,而不是替代字段命名。本文对比嵌套组、空组和自定义 Handler 的边界,给出避免 request_id、status 等属性冲突的设计方法。
-
Go slices.SortedStableFunc 会把 iter.Seq 收集到新切片,再按比较器稳定排序;比较结果相等的元素保留原迭代顺序,空序列返回 nil。本文说明比较器写法、空结果边界,以及它与 SortStableFunc 的选择。
-
Go 1.23 起可用 slices.Backward 按降序索引反向遍历切片,无需复制或改变元素顺序。本文给出最小写法、提前停止、索引写回、结构体值语义、空切片和旧版本兼容示例。
-
Go 1.23 起可用 slices.Chunk 返回 iter.Seq,按固定大小惰性遍历连续子切片。本文用完整示例说明末尾短块、空输入、非法大小、容量裁剪、元素修改与批处理错误定位。
-
maps.EqualFunc 允许 Go 比较键类型相同但值类型不同的两个 map。本文用 string 与 []byte 的例子说明比较器写法,并梳理 nil、空 map、缺失键和不可比较值的边界。
-
maps.Keys 返回 map 键的 iter.Seq,但官方明确说明迭代顺序未指定,而且不同调用之间不保证一致。本文解释常见误区,并给出普通有序键、结构体键、测试与接口输出的稳定排序写法。
-
Go 1.23 起,maps.Collect 可以把 iter.Seq2[K,V] 键值序列收集为新的 map。本文从 slices.All 的最小写法讲到自定义 Seq2、重复键覆盖规则,以及 maps.Collect 与 maps.Insert 的选择边界。
-
Go 迭代器提前停止时,push 模式应在迭代器内部 defer 关闭资源并在 yield 返回 false 后立即 return;iter.Pull 模式则要在取得 next、stop 后立刻 defer stop。本文给出错误边界、包装器写法和可验证的测试清单。
-
用 Go iter.Pull 把 iter.Seq 推送式迭代器转换成按需调用的 next 函数,说明 stop 的释放责任、提前退出和空序列边界。
-
用 Go 1.23 的 iter.Seq2 为树形索引提供键值遍历时,可让 All 返回中序序列,并让递归 walker 把 yield=false 一路向上返回,从而支持 range break、保持封装且避免构造临时切片。
-
netip.Addr 本身就是不可变且可比较的值类型。本文从字符串解析、IPv4-mapped IPv6 规范化、zone、零值和端口边界出发,给出把 IP 地址安全放入 Go map 的实现方式。
-
Go 的 netip.AddrPort 用结构化 IP 与 uint16 端口保存地址,IPv6 文本则统一采用 [地址]:端口。本文说明 AddrPortFrom、ParseAddrPort、String、zone 和端口边界,避免日志与连接参数产生歧义。