用途:为 Go 服务提供数据库访问的规范与模式,涵盖 database/sql、连接管理、事务、迁移、查询构建器及 ORM(sqlc、GORM、ent)的使用。
主要能力:
- 连接管理:显式配置连接池,示例中设置 SetMaxOpenConns(25)、SetMaxIdleConns(10)、SetConnMaxLifetime(5time.Minute)、SetConnMaxIdleTime(1time.Minute),并用 PingContext 验证连接。
- 查询规则:仅使用参数化查询,避免 SQL 注入;始终传递 context,使用 QueryContext、QueryRowContext、ExecContext;错误检查后立即 defer rows.Close(),迭代后检查 rows.Err();用 errors.Is 显式处理 sql.ErrNoRows 并映射为领域错误。
- 事务:提供 WithTx 辅助函数保证出错回滚,关键操作可显式设置隔离级别,如 sql.TxOptions{Isolation: sql.LevelSerializable}。
- 结构与工具:仓储模式在消费方定义接口,在边界处将驱动错误映射为领域错误;sqlc 适合原生 SQL 项目,从带注解 SQL 生成类型安全 Go 代码;迁移使用 goose、golang-migrate、atlas 等工具,每次变更一个迁移,生产环境仅向前,带 down SQL,作为独立步骤运行而非服务启动时执行。
- 常见陷阱:空列使用 sql.NullString/sql.NullInt64 或指针字段;避免循环内查询导致的 N+1,改用 JOIN 或批量查询(WHERE id = ANY($1));避免 Query 与 defer rows.Close() 之间提前返回造成连接泄漏。
使用方式:技能提供摘要与按需加载的参考文件 references/query-patterns.md(查询/扫描/rows 模式、空值处理、N+1 规避、连接泄漏示例)和 references/tooling.md(仓储模式实现、sqlc 注解查询、迁移工具与规则),仅在摘要不足时读取。
适用场景:Go 后端服务的数据访问层设计、代码审查与重构。
限制:资料未提供具体安装命令、收费信息或平台支持范围;示例代码为模式参考,需按实际数据库驱动调整。