Go语言技术文章
-
flag.VisitAll 遍历的是 FlagSet 中已定义的全部参数,而 flag.Visit 只遍历本次 Parse 或 Set 后进入 actual 的参数。本文用一个命令行配置示例拆开两者边界,说明默认值、重复赋值和未解析参数该怎么排查。393 收藏 -
在高频日志、协议拼包或批量导出中,fmt.Sprintf 的完整格式化很方便,但单个整数转文本时可能带来不必要的工作。本文用 strconv.AppendInt 与 fmt.Sprintf 的同一输出基准,拆开分配、缓冲区复用和可读性边界,给出可验证的选型规则。277 收藏 -
围绕 Go 1.25 的 crypto.SignMessage 与 MessageSigner,拆解如何让签名封装同时兼容自带哈希和外部哈希的签名器,并验证回退路径与错误边界。490 收藏 -
flag.FlagSet.Set 不只是在 Parse 之后补一个值:它会调用目标 flag 的 Value.Set,成功后把该参数记入 actual,重复赋值则按调用顺序覆盖。本文用子命令配置示例说明默认值、Set、Parse 与 ContinueOnError 的边界。497 收藏 -
用 Go flag.VisitAll 遍历命令行参数,生成包含默认值、当前值和脱敏结果的配置清单,避免日志暴露密钥并保留可复核的覆盖信息。381 收藏 -
regexp.Regexp.LiteralPrefix 能返回正则表达式匹配必然拥有的字面前缀,但它不是完整的匹配判断。本文用请求路径筛选示例拆开 prefix、complete 与 MatchString 的边界,并给出可验证的安全用法。229 收藏 -
用 Go 的 io.CopyN 处理固定长度读取时,区分完整复制、短读 EOF 与底层读取错误,并给出可验证的判断代码。213 收藏 -
Go 1.26 的实验性 runtime/secret 通过 secret.Do 清理密码学临时数据。本文用一条短命密钥处理链说明启用方式、适用边界和不能替代的安全措施。337 收藏 -
netip.ParseAddr 失败时返回的是无效 Addr 和可诊断的错误,不能只靠 Addr{} 判断输入问题。本文用最小 Go 示例拆开 IPv4、IPv6、空字符串和带区域标识的边界,并给出服务端校验时可复用的判断顺序。170 收藏 -
os.ReadFile 读配置失败时,问题通常不在读取动作本身,而在工作目录、路径拼接和错误分类。本文用一段可运行的 Go 示例拆开定位顺序,并给出能保留原始原因的错误返回方式。225 收藏 -
用一个请求日志小项目说明 Go slog.Handler.WithAttrs 的正确用法:把稳定字段提前绑定到 Handler,再让每次 LogAttrs 只写变化字段,同时验证并发输出与字段快照边界。177 收藏 -
用 Go os.File.Chown 在 Linux 上修改文件的数字 UID 和 GID,区分权限、符号链接与跨平台边界,并用 Stat 和错误分类完成可回滚验收。221 收藏 -
用 Go archive/tar.Reader.Next 遍历归档时,处理未读数据、io.EOF 与非本地路径,避免跳过文件或把危险路径直接写入磁盘。352 收藏 -
Golang · Go教程 | 5天前 | 标准库 · 定时器 · 并发控制 · Go教程 · 工程实践 · Go 并发 定时任务 time.Ticker Ticker.Reset Ticker.Stop
服务里的定时任务需要动态调整周期时,直接替换 ticker 容易留下旧循环或多条消费路径。本文用一个可停止的刷新任务演示 time.NewTicker、Ticker.Reset、Ticker.Stop 与 ticker.C 的最小配合,说明 Reset 的边界、退出方式和复查方法。207 收藏 -
Golang · Go问答 | 5天前 | 标准库 · 并发编程 · 原子操作 · Go问答 · 竞态排查 · Go sync/atomic CompareAndSwap atomic.Bool 并发状态
用一个一次性初始化场景拆开 atomic.Bool.CompareAndSwap 的成功与失败路径,说明它如何把状态切换和抢占执行权合成原子动作,以及失败后何时跳过、何时重试。316 收藏