Go问答技术文章
-
Go 测试出现 testexit、日志突然中断或清理回调未执行时,先区分 os.Exit、runtime.Goexit 与测试失败,再用子进程隔离验证退出码,并让 TestMain 保留 m.Run 的标准结果。387 收藏 -
Golang · Go问答 | 2星期前 | 错误处理 · 文件上传 · Go问答 · Go multipart.Reader 临时上传文件 上传失败清理 multipart.Part Form.RemoveAll
Go multipart.Reader 流式上传要把临时文件当作未提交资源管理:单个 Part 写入失败立即删除当前文件,请求后续部件失败则回滚已落盘清单;使用 ReadForm 时改用 Form.RemoveAll。387 收藏 -
Go 的 url.Values 既能表达同名重复参数,也能表达单值参数,但 Add、Set 和 Encode 的组合会直接影响服务端拿到的结果。本文用标签筛选接口说明参数如何构造、编码、解析和验收。386 收藏 -
Go 的 math.Log2 在输入非常接近 1 时,内部减法会放大舍入误差,amd64 与 arm64 还可能因 FMA 产生不同结果。文章给出定位方法、替代写法和回归检查边界。386 收藏 -
把 os.File 遍历迁移到 io/fs.FS 时,WalkDir 返回的是文件系统内部的逻辑路径。本文说明如何在交给外部工具前安全转换为操作系统路径,并列出跨平台回归检查点。386 收藏 -
Go 发送到已关闭 channel 会直接触发 panic。本文从 close 语义、发送方所有权、多发送方汇合和取消信号四个角度说明如何安排关闭时机。386 收藏 -
Go test -run 匹配不到子测试名称,通常是忽略了父子测试名称的斜杠分段。本文用原创示例解释逐层正则、空段、锚点和特殊字符的写法,并给出 -list 排查清单。386 收藏 -
Go build tags 同时写平台和自定义条件时,文件未被选中通常不是 go build 失效,而是 &&、||、-tags 传值或文件名隐式约束叠加后的结果。本文用 go list 逐层排查。386 收藏 -
Golang · Go问答 | 3星期前 | 连接池 · 故障排查 · 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 收藏 -
Golang · Go问答 | 2天前 | 标准库 · HTTP服务 · 可观测性 · Go问答 · Go expvar http.ServeMux expvar.Handler /debug/vars 运行指标
解释 Go expvar.Handler 与默认 /debug/vars 的关系:两者输出同一份全局变量,区别在路由注册方式、ServeMux、访问路径和方法限制,并给出自定义挂载、访问控制与 httptest 验证示例。386 收藏 -
接口能返回 200,不代表客户端真的能用。本文用 Go 标准库 httptest.NewServer 从零写一个小型接口烟雾测试器,逐步检查状态码、Content-Type、JSON 字段和超时,并给出适合 CI 的验收边界。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 收藏