Go问答技术文章
-
Go 1.23 引入的 slices.Values 可以把切片暴露为 iter.Seq。本文用同一段可运行示例验证 range 消费、空切片和提前 break 的行为,并说明它与直接遍历切片的边界。487 收藏 -
context.AfterFunc 的 stop 返回 false,不等于回调丢失;它表示回调可能已经启动,或此前已经停止。本文用连接读超时和资源清理场景拆解停止竞态、完成同步与幂等写法。486 收藏 -
encoding/base64 的 AppendEncode 会把编码结果追加到已有切片,适合复用缓冲区。本文通过可运行示例说明输出容量、尾部数据和 RawStdEncoding 的边界。486 收藏 -
os.ReadDir 和 File.ReadDir 都能遍历目录,但排序规则并不相同。本文用最小示例说明文件名排序、directory order、n 参数和分页读取的边界,避免把稳定输出误当成底层目录顺序。486 收藏 -
Go 的 url.URL.JoinPath 会合并路径、清理 ./ 和 ../,并把连续斜杠压成一个。它适合拼接已经转义的路径片段,但不能替代路径段转义;本文用源码规则解释斜杠变化和路由边界。486 收藏 -
io.Pipe 用同步内存管道连接 Reader 和 Writer。写端 CloseWithError 会把错误传给后续读取,nil 则得到 EOF;本文用一个小实验拆开写入、读取消费、错误关闭和重复关闭的边界。486 收藏 -
Go slog 适合把请求 ID、用户标识和耗时统一写入结构化日志。本文从 HTTP 请求场景出发,给出 context 传递、Handler 过滤和字段命名的最小写法,并说明哪些信息不应直接写入日志。485 收藏 -
Go 的 json.Decoder 开启 DisallowUnknownFields 后,客户端多传字段会变成解码错误。本文用配置接口示例说明严格校验的适用边界、兼容新增字段的处理方式、错误定位和测试清单。485 收藏 -
用 Go 标准库 log/slog 的 Handler.WithGroup 组织请求、用户和数据库字段,比较文本与 JSON 输出,并验证自定义 Handler 的实现边界。485 收藏 -
Golang · Go问答 | 5天前 | golang · 泛型 · 性能 · unique · Go 1.23 · 内存管理 值规范化 unique.Handle Go unique.Make 字符串缓存
Go 1.23 的 unique.Make 可以把可比较值规范化为可廉价比较的 Handle,但它不是无条件的字符串驻留池。本文从标签解析缓存场景出发,拆开 Make、Handle、Value 和垃圾回收之间的关系,说明何时值得用、如何保留句柄,以及为什么不能只存 Value。483 收藏 -
strings.Builder 适合高效拼接字符串,但写入后复制会触发运行时检查。本文从零值使用、复制边界和返回字符串的别名风险说明正确写法。483 收藏 -
http.Header.Get 找不到请求头和请求头值为空时都会返回空字符串。本文用 http.Header、Header.Get 与逗号 ok 判断拆开这两个状态,并给出适合接口校验的写法。482 收藏 -
Go 服务把 regexp.Compile 放进请求函数后,正则本身没变,延迟却会随并发上升。本文用基准对比请求内编译、包级预编译和受控缓存,解释编译成本、并发读写与动态规则的边界。479 收藏 -
用 Go filepath.IsLocal 先拦截绝对路径和 .. 路径,再配合 Join 与符号链接复核,建立文件下载场景的安全边界。479 收藏 -
解释 Go net.IP.Equal 如何处理 4 字节 IPv4 与 IPv4-mapped IPv6,结合 To4 和 16 字节表示说明比较、规范化与边界判断。477 收藏