Go语言技术文章
-
用 Go 的 reflect.VisibleFields 和 StructTag.Lookup 生成字段映射,再以 reflect.Type 为键缓存不可变元数据。文章给出完整实现、并发取舍、嵌入字段处理和实际取值示例。315 收藏 -
Go 泛型约束里的 ~string、~int 表示一组底层类型相同的类型集合。本文用自定义类型和组合约束说明波浪线与精确类型项的区别,以及如何选择约束边界。459 收藏 -
Go 泛型约束应只暴露算法真正需要的能力。本文用 LatestByID 示例说明如何将 HasID 与 HasVersion 组合成 SyncRecord,解释接口嵌入的交集语义、类型项边界、函数参数替代方案,以及过度约束和性能误区。428 收藏 -
结合 Go 1.27 对具体泛型方法的支持,解释为什么接口方法仍不能声明额外类型参数,并用顶层泛型函数、接收者提升参数、具体泛型方法和窄接口四种方案重构 API。267 收藏 -
通过命名切片调用泛型过滤函数后类型退化的问题,讲清 S ~[]E 的含义、类型推断、返回 S 的实现方式,以及 nil、底层数组共享和元素类型变化时的设计边界。387 收藏 -
Go 中同一算法只因数据类型不同而重复时适合使用泛型;不同类型需要不同方法实现、调用方只关心行为时更适合接口。本文用 Map 与 io.Reader 对比,并给出四项选择检查。230 收藏 -
用一个窄而清晰的 Go 类型约束统一 int、int64 和 float64 求和,并通过近似类型项支持业务命名类型。文章给出 Sum、SumBy、表驱动测试,以及空切片、溢出和浮点精度的边界说明。182 收藏 -
Go 的 QueryRowContext 总会返回非 nil 的 Row,查询错误、无结果和类型转换问题会延迟到 Scan。本文用可运行的错误分支解释这一设计,并给出 sql.ErrNoRows、Context 和 Row.Err 的正确处理方式。358 收藏 -
Go 批量查询不能只检查 QueryContext 和 Scan。本文用稳定主键游标分批读取数据,并在每页推进游标前检查 Rows.Err、处理 Close 错误与上下文取消,避免把半页结果误判为成功。270 收藏 -
Go 的 database/sql 中,事务回滚并不等于所有相关资源都已正确收口。本文从 Tx、Rows、Stmt 和连接池指标四个层面定位连接仍被占用的常见原因。215 收藏 -
Go 事务业务代码返回 nil 并不代表提交成功。本文用可复用的 WithinTx 函数分别处理 BeginTx、业务执行、Rollback 与 Commit 错误,并说明上下文取消、panic 和 sql.ErrTxDone 的边界。495 收藏 -
Go 的 sql.DB 是并发安全的连接池句柄,不是单条连接。本文从数据库总容量、服务副本数与 DBStats 指标出发,给出 MaxOpenConns 等参数的估算和校准方法。243 收藏 -
Go 的 database/sql 连接池不是把连接数调得越大越好。本文用一段可落地的初始化代码说明 MaxOpenConns、MaxIdleConns、MaxConnMaxIdleTime、MaxConnMaxLifetime 与 DBStats 的关系,并给出等待指标和上下文超时的排查方法。171 收藏 -
Go 业务超时应优先使用 time.Now 保留的单调时间语义,日志和跨服务协议则使用墙上时间或剩余 Duration。本文拆解校时影响、API 选择、序列化边界和 RPC deadline 的决策方法。328 收藏 -
Golang · Go教程 | 3星期前 | JSON · 时间处理 · Go教程 · database/sql · 后端开发 · RFC3339 Go时间序列化 time.Duration JSON 数据库时间戳 sql.NullTime
用一个小型任务接口统一 Go 业务时间、Duration 与数据库可空时间戳,给出自定义 JSON 类型、仓储映射和往返测试。212 收藏