Go语言技术文章
-
Go 测试出现 testexit、日志突然中断或清理回调未执行时,先区分 os.Exit、runtime.Goexit 与测试失败,再用子进程隔离验证退出码,并让 TestMain 保留 m.Run 的标准结果。387 收藏 -
Golang · Go问答 | 3星期前 | 错误处理 · 文件上传 · Go问答 · Go multipart.Reader 临时上传文件 上传失败清理 multipart.Part Form.RemoveAll
Go multipart.Reader 流式上传要把临时文件当作未提交资源管理:单个 Part 写入失败立即删除当前文件,请求后续部件失败则回滚已落盘清单;使用 ReadForm 时改用 Form.RemoveAll。387 收藏 -
用公共事件信封承载 Kind 与 json.RawMessage,先解析公共字段,再把动态 payload 分流到具体 Go 结构体,并处理未知类型、空载荷和兼容性边界。387 收藏 -
用 Go 1.27 实验性 simd API 编写跨 amd64、arm64 与 wasm 的向量代码,覆盖向量长度、尾段处理、模拟路径和 archsimd 适配边界。387 收藏 -
通过命名切片调用泛型过滤函数后类型退化的问题,讲清 S ~[]E 的含义、类型推断、返回 S 的实现方式,以及 nil、底层数组共享和元素类型变化时的设计边界。387 收藏 -
Go 的 maps.Insert 可以把 iter.Seq2 键值流写入目标 map。本文从 maps.All、slices.All 和自定义生成器三个来源说明合并写法,并梳理重复键覆盖、惰性执行、空流与遍历顺序边界。387 收藏 -
sync.OnceFunc 会把固定关闭回调与一次性状态封装成同一个可并发调用的函数,首次调用完成前其余调用者会等待。本文给出共享资源关闭写法,并比较 Once、原子标记、OnceValue 与单所有者方案的适用边界。387 收藏 -
Golang · Go问答 | 4星期前 | 连接池 · 故障排查 · 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问答 | 1星期前 | 标准库 · HTTP服务 · 可观测性 · Go问答 · Go expvar http.ServeMux expvar.Handler /debug/vars 运行指标
解释 Go expvar.Handler 与默认 /debug/vars 的关系:两者输出同一份全局变量,区别在路由注册方式、ServeMux、访问路径和方法限制,并给出自定义挂载、访问控制与 httptest 验证示例。386 收藏 -
Go 使用 database/sql.Rows 时,连接数持续升高往往与结果集未关闭、迭代错误未检查或事务未结束有关。本文用 Rows 生命周期、DB.Stats 和退出路径清单定位并修复连接泄漏。385 收藏 -
Golang · Go教程 | 3星期前 | 切片 · 数据结构 · 标准库 · 泛型 · Go教程 · Go slices稳定去重 Go切片去重 Go保留顺序去重 Go泛型切片处理 Go slices包
使用 Go 的 slices 与泛型思路处理切片全局去重:保留第一次出现的值和原始顺序,同时说明 slices.Compact 的边界、不可比较元素和复杂度取舍。385 收藏 -
Go 的 json.Decoder 在空输入或读取完流后会返回 io.EOF。本文用计数器和错误分类区分正常结束、空响应、截断 JSON 与语法错误,给出可直接改造的处理代码。385 收藏 -
ring.New(0) 返回 nil 不是初始化失败,而是 container/ring 对空环的明确表示。本文结合官方源码区分 nil 空环与 Ring 零值,说明 n<=0 的处理、可安全调用的方法及两种工程修复方式。385 收藏 -
Go maphash.Seed 只属于单个进程,不能序列化或跨进程重建。本文解释它与 Hash、Sum64 的关系,并给出保存稳定摘要、重启后重建内存分桶的 Go 实现方案。385 收藏