-
在高频日志、协议拼包或批量导出中,fmt.Sprintf 的完整格式化很方便,但单个整数转文本时可能带来不必要的工作。本文用 strconv.AppendInt 与 fmt.Sprintf 的同一输出基准,拆开分配、缓冲区复用和可读性边界,给出可验证的选型规则。
-
用一个可复用的 Go HTTP 客户端设置 MaxConnsPerHost,区分总连接上限与空闲连接上限,并掌握按 host:port 判断和验收配置的方法。
-
Go 1.27 新增 bytes.CutLast,可按最后一个分隔符返回 before、after 和 found。文章对比 LastIndex 手写切片,说明缺失分隔符与共享底层数组的边界。
-
Go vendor 模式下,不能只看 go.mod 猜依赖版本。本文用 vendor/modules.txt、go list -mod=vendor 和 go version -m 建立从源码目录到最终二进制的核对路径。
-
Go fs.Sub 出错时,先区分路径格式错误和子目录访问错误:用 fs.ValidPath 检查 dir,再用 fs.Stat 确认目标存在且是目录,并通过 PathError 与 errors.Is 定位真正失败的操作。
-
用 ctx.Err() 判断取消状态,用 context.Cause(ctx) 读取业务原因,掌握 WithCancelCause、WithTimeoutCause 以及父子 Context 的第一次取消规则。
-
当 errors.Is 判断包装错误失效时,先区分单链 Unwrap 与 errors.Join 的多链展开,再用可复现代码检查哨兵错误是否仍在错误树中。本文从一个接口报错现场出发,给出定位、修复和边界验证方法。
-
围绕 Go time.Parse 与 time.ParseInLocation,说明带 Z、数值偏移和时区缩写的字符串如何选择布局,给出可复用的解析代码与排错清单。
-
Go 的 text/template 与 html/template API 很像,但输出边界不同:日志和邮件纯文本使用 text/template,浏览器 HTML 使用 html/template。本文用一个最小渲染项目对比普通文本、HTML 文本节点和 href 属性中的转义结果,并说明 template.HTML 的信任边界。
-
Go 一次性值加载适合只初始化一次且可并发调用的值计算,但初始化函数一旦 panic,后续调用仍会重复 panic;需要重试时,应把错误返回和重试状态放在明确的控制器中。
-
Go 的 archive/zip 中,目录条目和空文件都可能没有可读内容,但判断依据不同。本文用 FileHeader.IsDir、Name、NonUTF8 和 Open 组织一个安全的解压循环,说明如何保留空文件并定位条目读取错误。
-
strings.Builder 能减少循环拼接中的中间字符串复制,但 Grow、String、Reset 和按值传递都有明确边界。本文用最小示例说明如何预估容量、保持单一所有者,并用 Cap、Len 和基准测试判断优化是否成立。
-
Go 中把 range 变量直接交给 goroutine 闭包,常会让多个异步任务读到同一个值。本文用可复现代码拆开捕获时机、参数传递和验收方法,给出适合生产代码的修复边界。
-
Go 证书主机名校验失败时优先检查 SAN,不要把 CN 当作现代校验依据;本文区分 DNS SAN、IP SAN、ServerName 与 RootCAs,并给出自定义 CA 的排查和配置方法。
-
Go 的 log/slog 可以为同一请求派生一个带 WithGroup 和 With 公共属性的 logger,让 request_id、method、path 等字段自动出现在后续日志中。本文说明派生作用域、TextHandler 与 JSONHandler 的输出差异,以及 WithGroup 和 slog.Group 的选择。