Go语言技术文章
-
Go 模块版本发布后发现严重问题,可以在 go.mod 中用 retract 声明单个版本或闭区间,再发布一个更高版本承载撤回信息,让后续 @latest 和升级选择避开坏版本。332 收藏 -
讲清 Go compress/gzip 的 Header.Name 如何写入 gzip 文件头、何时设置才生效、字符限制是什么,以及它与输出文件路径的区别。332 收藏 -
Go select 中加入 default 后,消费者在没有消息时会立即返回,放进无限循环就可能形成高频空轮询。本文说明空转根因,并给出阻塞接收、定时退避、批处理和退出信号的选择边界。332 收藏 -
Go 中 <-chan 是只接收通道,close 只能作用于双向或只发送 channel。本文解释这个编译限制的设计原因,并给出生产者关闭、消费者安全接收的写法。332 收藏 -
讲清 filepath.Rel 返回 .. 时的越界判断,给出跨平台的 Go helper,并说明 filepath.IsLocal 与 os.OpenInRoot 的适用边界。332 收藏 -
Go 的 sync.Once 适合做只读配置、规则表和重量级客户端的懒加载。它解决的不是语法问题,而是并发场景下只初始化一次、结果复用和失败边界怎么处理的问题。331 收藏 -
Go slog.Attr 适合把结构化字段交给日志处理器,但敏感字段不能在组装阶段被误写入。本文用请求日志场景说明 Attr 的组装顺序、脱敏边界、With 继承行为与单测核对方法。331 收藏 -
当正则模式的一部分来自用户输入或配置时,regexp.QuoteMeta 能把文本中的正则元字符当作普通字符处理。本文比较直接拼接与 QuoteMeta 的匹配结果,并说明它不适合替代完整正则语法的边界。331 收藏 -
Go 标准库 flag 默认适合单值参数,但 --tag=a --tag=b 这类重复参数需要自定义 flag.Value。本文用一个可运行的小工具说明 String、Set、Parse 的关系、默认值处理和常见边界。331 收藏 -
Go 1.27 移除了 go 命令对 bzr 的直接拉取支持。本文讲清代理与直连差异、两条迁移路线,以及干净缓存和 CI 的验收方法。331 收藏 -
Go 1.27 会整理 go.mod 中多个 require 块。本文从升级后的差异现场出发,说明 direct 与 indirect 分组的触发条件、验证方法和 CI 防复发做法。331 收藏 -
Go 的 CheckRedirect 返回普通错误时,上一跳 Response 可能仍然返回,但 Body 已被关闭。本文解释如何使用 ErrUseLastResponse 保留响应并安全读取正文。331 收藏 -
Go encoding/csv 读取带注释行的 CSV 时,设置 Reader.Comment 即可跳过行首注释;本文同时说明前导空白、TrimLeadingSpace、FieldsPerRecord 和解析错误的处理边界。331 收藏 -
解释 Go benchmark.ResetTimer 的正确调用位置,区分准备阶段、计时区间、子基准和并行基准的边界,避免 ns/op 与分配数据被错误污染。331 收藏 -
Go sync.Once 只保证初始化函数执行一次,不会因为返回错误自动重试。本文解释其完成状态语义,并给出失败可重试、成功只执行一次的互斥封装。331 收藏