Go语言技术文章
-
把 os.File 遍历迁移到 io/fs.FS 时,WalkDir 返回的是文件系统内部的逻辑路径。本文说明如何在交给外部工具前安全转换为操作系统路径,并列出跨平台回归检查点。386 收藏 -
Go 发送到已关闭 channel 会直接触发 panic。本文从 close 语义、发送方所有权、多发送方汇合和取消信号四个角度说明如何安排关闭时机。386 收藏 -
Go test -run 匹配不到子测试名称,通常是忽略了父子测试名称的斜杠分段。本文用原创示例解释逐层正则、空段、锚点和特殊字符的写法,并给出 -list 排查清单。386 收藏 -
Go os.Link 返回错误时,不要只看字符串。通过 LinkError 和底层 errno 区分跨文件系统、权限、目标冲突与文件系统不支持,再决定复制或符号链接兜底。386 收藏 -
Go build tags 同时写平台和自定义条件时,文件未被选中通常不是 go build 失效,而是 &&、||、-tags 传值或文件名隐式约束叠加后的结果。本文用 go list 逐层排查。386 收藏 -
Golang · Go问答 | 1星期前 | 连接池 · 故障排查 · database/sql · Go问答 · Go 数据库连接池 QueryContext rows.Close Rows.Err sql.Rows
Go 查询拿到 sql.Rows 后如果在扫描中途返回却没有 Close,底层连接可能长期处于 InUse,达到 MaxOpenConns 后新请求开始等待。本文给出统一关闭、检查 rows.Err 和用 DB.Stats 定位连接占用的方法。386 收藏 -
本地 go work use 能找到 sibling 模块,不代表 CI 也拥有同样的目录。本文从相对路径、检出范围和 GOWORK 状态排查原因,并区分工作区联调与单模块消费者构建。386 收藏 -
后台任务最难排查的不是启动,而是失败后谁负责停下、错误如何回到请求方、剩余 goroutine 怎样确认已经退出。本文用 Go errgroup 组织并发任务,拆解退出信号、错误回收和最小验收方式。385 收藏 -
Go 1.27 永久移除 asynctimerchan,time 包定时器通道始终使用同步语义。本文从版本、配置、cap/len 和 Stop/Reset 回归四个边界,给出旧行为排查方法。385 收藏 -
slices.Compact 只会合并连续重复元素,不是全局去重函数。本文用 Go 示例说明如何识别顺序边界、何时先排序,以及如何使用 CompactFunc。385 收藏 -
Go 中同名包不代表同一个导入目标。本文用 go list 对照 ImportPath、Dir 和 Name,说明如何核对 go.mod 模块路径、internal 父目录与调用方边界,并定位真实加载错误。385 收藏 -
用 Go archive/zip 按条目读取大文件,先检查目录元数据,再用 File.Open 和 io.CopyBuffer 流式处理,同时区分文件名编码、路径安全、压缩算法和校验错误。385 收藏 -
Go 使用 database/sql.Rows 时,连接数持续升高往往与结果集未关闭、迭代错误未检查或事务未结束有关。本文用 Rows 生命周期、DB.Stats 和退出路径清单定位并修复连接泄漏。385 收藏 -
用 Go flag.NewFlagSet 和 ContinueOnError 接管参数错误,区分缺失参数、未知参数与 -h,统一输出 Usage 和退出码。384 收藏 -
Go 基准测试开启内存分配报告后,结果变化不一定代表业务代码变慢。本文从计时边界、b.ReportAllocs、B/op、allocs/op 和重复运行入手,区分真实分配与测量噪声。384 收藏