Go语言技术文章
-
Go 的 database/sql 不会统一改写占位符,? 还是 $1 取决于数据库驱动和后端语法。本文用 MySQL 与 PostgreSQL 对照示例,说明参数值、表名列名和跨数据库适配的边界。149 收藏 -
Go 表驱动测试中,把资源创建放进 t.Run,临时目录交给 t.TempDir,其他连接和文件用 t.Cleanup 注册回收,就能隔离用例并正确处理失败、跳过和并行子测试。233 收藏 -
Go 的 rows.Next 返回 false 不一定代表结果集正常读完,也可能是迭代期间发生了错误。本文用最小可用代码拆开 QueryContext、Scan、Err 和 Close 的判断边界,说明如何避免把超时、驱动错误误判为空结果。433 收藏 -
Go slog 统一记录请求 ID 和业务字段的实战方法:用 context 传递请求范围数据,用 Logger.With 和 WithGroup 分层复用稳定字段,并通过 InfoContext、LogAttrs 保持日志可检索且不串请求。337 收藏 -
普通 []byte(s) 转换得到可写字节切片,修改它不会回写原 string;中文按字符修改应使用 []rune,结果再按需转回 string。307 收藏 -
用 atomic.Value 保存不可变配置快照,让热更新线程整份替换配置,并发请求只读当前快照,避开半更新状态与类型不一致 panic。110 收藏 -
Go 的 FormatFloat 和 printf 只能控制浮点数的显示格式,不能把二进制 float64 变成精确十进制。本文用 0.1+0.2 说明误差来源,并比较展示格式、整数最小单位和高精度十进制三种处理方式。263 收藏 -
Go 解析 JSON 大整数时,map[string]any 默认会把数字放入 float64,可能改写末尾精度。本文比较结构体整数、json.Decoder.UseNumber 和字符串三种方案,帮助你按数据结构与运算需求选择正确做法。391 收藏 -
Go 超时配置写成整数时,time.Duration 会按纳秒解释,1 并不是 1 秒。本文解释单位原因,给出固定值、整数配置和带单位字符串的正确写法,并整理超时排查清单。354 收藏 -
Go 标准库 flag.FlagSet 可以为每个子命令建立独立的参数集合。本文用 serve 和 check 示例说明命令分发、参数解析、位置参数校验及错误边界。201 收藏 -
Go 两个 time.Time 显示相同但用 == 比较不相等,通常是 Location 或 monotonic clock 不同。本文通过原创示例解释 Equal 与 == 的边界,并给出 map 键、数据库精度和业务日期的正确写法。382 收藏 -
Go 调用外部程序时,使用 Cmd.Stdout 和 Cmd.Stderr 可分别接收标准输出与标准错误;大输出或实时日志则用两条管道并行读取,并在读取完成后调用 Wait。262 收藏 -
讲清 Go 的 json.Marshal 对 map 键的支持边界:字符串、整数和 encoding.TextMarshaler,以及结构体、浮点数等键的替代方案。317 收藏 -
Go 可以用标准库 embed 在编译期把 HTML、CSS、JavaScript 等静态文件写入可执行程序,再通过 embed.FS、fs.Sub 和 http.FileServer 提供页面。本文给出完整写法,并说明目录、隐藏文件、模板和更新边界。446 收藏 -
Go 结构体转 JSON 得到 {},通常是字段未导出、json 标签明确忽略字段,或所有字段被 omitempty 按零值省略。本文用最小示例和检查清单说明如何快速定位并修复。374 收藏