Go问答技术文章
-
go mod vendor 后构建仍访问 module cache?从 GOMOD、GOWORK、GOFLAGS、vendor/modules.txt 和 -mod 模式逐层定位。357 收藏 -
Go fuzz corpus 报格式错误时,先定位 testdata/fuzz 中的具体文件,再核对 go test fuzz v1、参数数量、类型与顺序,最后用单条语料完成最小复现。357 收藏 -
Go encoding/base64 中,StdEncoding 保留 RFC 4648 的等号填充,RawStdEncoding 关闭填充。本文用同一份输入对比两种输出,并说明解码匹配、URL 字符集与 WithPadding 的选择边界。357 收藏 -
json.Number 保存的是 JSON 数字原文,而 Int64 内部按十进制整数调用 strconv.ParseInt。1.5、1e3 虽是合法 JSON 数字,却不是 Int64 接受的整数文本;超出 int64 范围则会返回 range error。357 收藏 -
Go 1.22 后,for 循环里用 := 声明的循环变量按每轮独立处理,很多闭包捕获问题不再需要手写 v := v。但迁移时仍要看 go.mod 版本、go vet 结果和兼容边界。356 收藏 -
旧代码仍依赖 log.Logger 时,可以用 slog.NewLogLogger 把输出桥接到 slog.Handler。关键是先选清楚桥接级别,再分别验证旧日志入口、结构化字段和 SetDefault 后的行为。356 收藏 -
用 Go testing.T.Cleanup 管理测试资源时,结合 t.Helper 隐藏辅助函数栈帧,让清理失败更接近真实测试调用方;本文说明生命周期、逆序执行、子测试边界和排查清单。356 收藏 -
从 invalid buffer overlap 故障讲清 Go cipher.AEAD.Open 的切片重叠契约,比较精确重叠、完全分离与错位重叠,并给出原地解密、独立缓冲区和认证失败处理方法。355 收藏 -
Go 超时配置写成整数时,time.Duration 会按纳秒解释,1 并不是 1 秒。本文解释单位原因,给出固定值、整数配置和带单位字符串的正确写法,并整理超时排查清单。354 收藏 -
Go runtime/metrics 采样太频繁时,先区分 Read、快照处理和导出成本,再通过复用 Sample、筛选指标和异步批量上报降低开销。354 收藏 -
Go 普通 map 不能直接承受并发读写,运行时 panic 只是可能出现的表现。本文用一个小缓存说明 map 并发边界,比较 RWMutex 与 sync.Map,并把 go test -race 放进回归验收。354 收藏 -
从 DB.Stats 指标、Rows 生命周期和提前退出分支入手,定位 Go database/sql 连接耗尽,并给出可复用的关闭与防复发写法。354 收藏 -
runtime.GoroutineProfile 的记录数会随 goroutine 创建和退出而变化。本文比较一次分配、带余量的有界重试和 runtime/pprof,给出容量上限、重试上限、records[:n] 截断与失败处理写法。354 收藏 -
从一个批量拼接日志的场景出发,验证 bytes.Buffer.Grow 预留容量何时有用、WriteString 如何触发扩容,以及 Reset 为什么只清空长度而不承诺释放底层空间。352 收藏 -
用 Go archive/tar.Reader.Next 遍历归档时,处理未读数据、io.EOF 与非本地路径,避免跳过文件或把危险路径直接写入磁盘。352 收藏