sqlgen 不是 ORM,而是代码生成器。它会解析 Go 结构并为您生成所需的结构方法。
- sqlgen 基于代码优先方法 — 您不需要首先编写 SQL,而是使用 Go 代码。
- sqlgen 支持代码生成 — 我们生成烦人的部分,让您可以快速构建您的应用程序。
- sqlgen 优先性能 — 大多数事情将在编译时而不是运行时定义。
- sqlgen 支持泛型 — 我们使用泛型来消除运行时反射成本并减少内存分配。
- sqlgen 消除副作用 - 当修改模型时,您将获得预期的结果而不是副作用。
Driver | Support |
---|---|
mysql |
✅ |
postgres |
✅ |
sqlite |
✅ |
-
安装 sqlgen。
go install github.com/si3nloong/sqlgen/cmd/sqlgen@main
-
定义您的结构。
package model import "time" type LongText string type User struct { ID int64 `sql:",auto_increment"` Name string Age uint8 Address LongText Created time.Time }
-
生成输出文件。
# sqlgen generate <source_file> sqlgen generate model/user.go
-
生成的代码如下:
// Code generated by sqlgen. DO NOT EDIT. package model import ( "database/sql/driver" "time" "github.com/si3nloong/sqlgen/sequel/types" ) func (User) TableName() string { return "`user`" } func (User) Columns() []string { return []string{"`id`", "`name`", "`age`", "`address`", "`created`"} } func (v User) IsAutoIncr() {} func (v User) PK() (columnName string, pos int, value driver.Value) { return "`id`", 0, int64(v.ID) } func (v User) Values() []any { return []any{int64(v.ID), string(v.Name), int64(v.Age), string(v.Address), time.Time(v.Created)} } func (v *User) Addrs() []any { return []any{types.Integer(&v.ID), types.String(&v.Name), types.Integer(&v.Age), types.String(&v.Address), (*time.Time)(&v.Created)} }
更多帮助以开始使用:
- 入门教程 - 一份全面的指南,以帮助您入门
- CLI 指南 用于 CLI 命令的指南。
- FAQ(常见问题解答) - 常见的问题解答。
- 配置文件 - 配置代码生成。
如果您认为发现了错误,或某些事情的行为不如您所期望,请在 GitHub 上提出问题。
我们欢迎贡献,阅读我们的贡献指南以了解更多关于对sqlgen进行贡献的信息。
感谢这些公司支持开源开发者 ❤
版权所有 (c) 2023-present,SianLoong Lee