简介
codegen
https://github.com/xyzbit/codegen 是一个专注于提高开发效率的代码生成工具集合。
目前主要包含了数据库访问层(Repository)代码生成功能,未来可能会扩展更多功能模块如: API 接口代码生成,API错误码生成,API SDK 生成。
核心功能:数据库仓储层代码生成(dbrepo)
在传统 Web 开发中,我们常常陷入以下重复劳动:
- 模型层代码手工编写:每张数据库表都需要手动创建对应的结构体/类,字段类型需要与数据库列类型精确匹配
- SQL 语句硬编码:即使使用 ORM 工具,复杂查询仍需手写 SQL,容易产生字符串拼接错误
- Repo 层每个实体代码重复度极高:每个实体都需要实现基础的 Insert/Update/Delete 方法,代码重复率高达 70%
- Repo 层没有统一标准,难以维护:Repo的代码没有标准,导致很多代码重复编写、无法复用
codegen
的 dbrepo
模块是该工具集中的一个重要组件,它能够根据数据库表结构自动生成完整的仓储层代码。这个功能对于遵循领域驱动设计(DDD)架构的项目特别有用。
效果如下:
生成的 实体、仓储层接口、仓储层实现、以及仓储层mock实现
主要特点
- 完整的代码生成
- 生成实体定义(Entity)
- 生成仓储接口(Repository Interface)
- 生成接口实现(Repository Implementation)
- Mock 接口实现支持(SQLite 模拟数据、Docker 容器化测试环境)
- 灵活的配置方式
- 支持 YAML 配置文件
- 支持命令行参数
- 支持混合配置模式
快速体验
- 工具安装
go install github.com/xyzbit/codegen@latest
- 进入 example 目录
cd sqlgen/example
- 生成 repo 层代码: xx_adpter.go(接口实现)、xx_repo.go(接口定义)、xx_entity(实体)
- 使用配置文件
codegen dbrepo gorm -c sqlgen.yaml
详细用法参考项目README.md
https://github.com/xyzbit/codegen
代码使用示例
生成的代码完全兼容 GORM,并提供了简洁的查询接口。以下是一些常见使用场景:
func Example() {
ctx := context.Background()
// 初始化一个 mock repo 用于测试.
userRepo, _ := data.NewSQLiteMockUserRepo()
err := userRepo.Create(ctx,
&entity.User{
NickName: "lee",
Uid: 1,
}, &entity.User{
NickName: "lee",
Uid: 2,
},
)
if err != nil {
fmt.Printf("create user error: %v", err)
return
}
// 列表查询
users, err := userRepo.List(ctx, gormx.NewQuery().Eq(entity.UserNickName, "lee"))
if err != nil {
fmt.Printf("List user error: %v", err)
return
}
fmt.Printf("List user: len(%d)\n", len(users))
// 事务处理
err = gormx.Transaction(ctx, userRepo, func(txCtx context.Context) error {
// 创建用户
err := userRepo.Create(txCtx, &entity.User{
NickName: "test",
Uid: 3,
})
if err != nil {
return err
}
// 记录日志
err = userRepo.Delete(txCtx, 1)
if err != nil {
return err
}
return nil
})
if err != nil {
fmt.Printf("Transaction error: %v", err)
return
}
fmt.Printf("Transaction success\n")
// Output:
// List user: len(2)
// Transaction success
}
工具优势
- 提高开发效率:自动生成样板代码,减少重复工作
- 代码一致性:确保仓储层代码风格统一
- 易于测试:内置 Mock 支持,方便单元测试
- 灵活配置:支持多种配置方式,适应不同项目需求
未来展望
目前该工具集主要专注于数据库访问层代码生成,未来可能会扩展更多功能,如:
- 错误码生成
- API 接口代码生成
- API SDK 生成
🌟 更多精彩内容,欢迎关注我的公众号 [二进制茶馆],我们一起交流学习
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。