Go语言技术文章
-
用一个临时日志缓冲区示例,说明 sync.Pool 如何在 Get 后初始化、Put 前清理,避免高并发复用对象时泄露上一次请求的脏状态。257 收藏 -
单仓多模块项目可以只提交 go.mod、go.sum、初始化脚本和忽略规则,让每位开发者在本地生成使用相对路径的 go.work,并让 CI 通过 GOWORK=off 独立验证模块,避免个人路径和工作区依赖污染版本库。257 收藏 -
unique.Make 设计上不会永久保留所有失去 Handle 的规范值,但活跃 Handle 会延长生命周期,高基数长期服务还要关注弱引用清理时机与 Go 官方已知问题。本文给出适用边界、代码和监控建议。257 收藏 -
梳理 Go net/http 的 HTTP/1、TLS HTTP/2 与明文 HTTP/2 配置差异,给出客户端、服务端匹配方式和连接失败排查清单。257 收藏 -
t.Parallel 不是把子测试函数立即丢到后台执行,而是在调用点暂停,等父测试函数返回后再进入并行阶段。理解这个边界,才能正确处理循环变量、共享资源和测试并发上限。256 收藏 -
Go 服务可以让请求边界把 trace_id 写入 context,再由 slog 自定义 Handler 在日志出口统一补充字段。本文给出可直接复用的包装器、中间件和 OpenTelemetry 提取方式,并说明伪造、覆盖与隐私边界。256 收藏 -
Go testing/quick 的 Config 可以同时控制随机输入和检查次数:用 math/rand.New(rand.NewSource(seed)) 固定 Rand,用 MaxCount 限制迭代上限。本文说明两者的优先级、生命周期和失败定位边界。256 收藏 -
Go 1.23 起可用 unique.Make 规范化可比较值。本文用重复标签对象示例说明如何保存 unique.Handle[string]、在热路径比较句柄、在输出边界取回 Value,并解释何时不该使用。255 收藏 -
Go HTTP 请求重试不要一股脑塞进 Transport:网络级可重放失败适合统一处理,创建和写入接口必须由业务层配合幂等键、结果查询与退避策略,才能避免超时后的重复写入。255 收藏 -
Go database/sql 的 SetConnMaxIdleTime 看连接连续空闲多久,SetConnMaxLifetime 看连接从创建起活了多久。本文用时间线、配置示例和 DBStats 说明两者区别与组合方式。255 收藏 -
Go slices.Compact 只压缩连续重复值,并会清理新长度之后的尾部。本文结合源码说明 clear 的内存语义、原地复用边界和安全使用方式。254 收藏 -
讲清 Go database/sql Rows 读取 SQL NULL 的正确方式:用 NullString、NullInt64 或 sql.Null[T] 接住空值,结合 Valid 判断、Rows.Err 和 Close 保留完整数据语义。254 收藏 -
本文用 Number 与 ID 两个示例说明 Go 泛型类型集合约束的设计方法,覆盖 ~、|、comparable、命名类型、map 键和 API 复用边界。254 收藏 -
围绕 Go archive/tar 的 Header.Name 讲清普通相对路径、父目录跳转、tar.ErrInsecurePath、链接条目和固定解压根目录的安全判断方法。253 收藏 -
讲清 Go http.ServeContent 中 modtime 的真实作用:如何配合 Range、If-Range 和 Last-Modified 返回稳定的部分内容响应,并避开 time.Now() 造成的缓存问题。253 收藏