Go语言技术文章
-
用 Go slog.LogValuer 为包含 token 和邮箱的业务对象定义安全日志表示,只输出 request_id、账号后缀和状态摘要;同时说明 LogValuer、Value.Resolve 与 ReplaceAttr 的职责边界。398 收藏 -
strings.Builder 的 Grow 只预留后续字节容量,String 后继续写入通常不是禁用操作;真正需要警惕的是复制非零 Builder、误把容量当长度,以及负数参数触发 panic。398 收藏 -
Go 遇到 import cycle not allowed 时,关键不是搬文件,而是拆开包依赖环。本文用 checkout、payment 和 PaymentGateway 示例说明接口归属、隐式实现、组合根注入及 go list 排查方法。398 收藏 -
Go 测试里用 testing.TB.Setenv 设置临时环境变量,再用 t.Cleanup 管理关联状态,可以让测试结束后自动恢复。本文说明清理顺序、并行边界和可执行检查方法。398 收藏 -
Go net/url 中 PathEscape 与 QueryEscape 都是 URL 转义函数,但服务的语义边界不同。本文用特殊字符对比、URL 结构写入和解码检查,说明路径参数与查询参数的正确选择。398 收藏 -
用一个小型 CSV 检查工具,把 Go encoding/csv 的 ParseError 行列、InputOffset 字节边界和原始行片段组合起来,快速定位坏记录。398 收藏 -
Go maps.Clone 可以复制 map 并让键级修改彼此独立,但它只做浅拷贝。本文从普通值、nil、空 map、自定义类型和切片 value 说明使用边界,并补上并发快照注意事项。398 收藏 -
Go 的 ascii85.NewDecoder 接收 io.Reader,会跨底层 Read 边界保留未完成编码组。本文用 io.MultiReader 连接分段输入,说明 EOF 收尾、<~ ~> 包装符、CorruptInputError、限流与生产验收方法。398 收藏 -
用 Go iter.Seq 封装数据库 keyset 分页,把查询延迟到遍历发生时,并在提前停止、扫描错误和上下文取消时正确结束查询与释放 sql.Rows。398 收藏 -
gofpdf 的 Cell 默认把当前位置移到右侧,MultiCell 输出多行后回到左边距并进入下一行。本文用坐标记录、CellFormat 和表格布局示例说明如何选择与排查。398 收藏 -
Go sonyflake 通过 Settings.StartTime 设置 ID 时间字段的坐标原点。本文给出 v2 的配置写法,并按起始时间、机器号、生成结果三层排查创建失败和取不到 ID 的原因。398 收藏 -
Go filepath.Split 会在最后一个操作系统路径分隔符后拆出目录和文件名,并保留目录部分的分隔符。本文用一个小程序说明常见输入、末尾分隔符、连续分隔符,以及它和 filepath.Dir、filepath.Base 的区别。398 收藏 -
Go httptrace.ClientTrace 可以在 GotConn 回调中记录连接是否复用。本文说明 Reused、WasIdle、IdleTime 的区别,以及同一个 http.Client、响应体关闭和 HTTP/2 场景下的排查边界。398 收藏 -
strconv.ParseInt 的错误不能只看 Error() 字符串。本文用 NumError、errors.Is 和参数边界区分语法错误、数值越界、非法进制与非法位宽,并给出适合接口输入的处理方式。398 收藏 -
Go ascii85.NewEncoder 可能暂存不足四字节的尾块。本文解释 Write 与 Close 的职责,给出完整编码示例,并说明错误处理、外层缓冲和消息边界。398 收藏