闽公网安备 35020302035485号
| 实现方式 | Go ORM库 | star |
|---|---|---|
| reflect to struct | go-gorm/gorm | 36.6k |
| reflect to struct | go-xorm/xorm | 6.7k |
| reflect to struct | upper/db | 3.5k |
| Code gen | go-gorm/gen | 2.3k |
| Code gen | ent/ent | 15.9k |
| Code gen | sqlc-dev/sqlc | 14.2k |
| SQL enhance | Masterminds/squirrel | 7.1k |
| SQL enhance | jmoiron/sqlx | 16.6k |
package main
import (
"log"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
type User struct {
gorm.Model
Name string`gorm:"not null"`
Email string`gorm:"unique;not null"`
}
func main() {
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{})
if err != nil {
log.Fatal(err)
}
// 堆代码 duidaima.com
// 创建记录
db.Create(&User{Name: "Alice", Email: "alice@example.com"})
// 查询记录
var user User
db.First(&user, "name = ?", "Alice")
log.Printf("User: %+v\n", user)
}
2、代码生成型高运行时性能:无需依赖反射,运行时效率更高。
开发流程复杂:生成代码与手写代码之间的同步和维护可能增加开发难度,尤其在频繁修改 schema 时。
package main
import (
"context"
"log"
"entgo.io/ent/dialect/sql"
_ "github.com/mattn/go-sqlite3"
"entgo.io/ent/examples/start/ent"
)
func main() {
client, err := ent.Open(sqlite.Open("./ent.db"), &sql.Config{Driver: "sqlite3"})
if err != nil {
log.Fatal("failed to connect to the database:", err)
}
defer client.Close()
// 创建一个新用户
user, err := client.User.Create().
SetName("Alice").
SetEmail("alice@example.com").
Save(context.Background())
if err != nil {
log.Fatal(err)
}
log.Println("User created:", user)
}
3、SQL增强型库轻量高效:直接使用原生 SQL,无额外 ORM 开销
package main
import (
"log"
"github.com/jmoiron/sqlx"
_ "github.com/mattn/go-sqlite3"
)
type User struct {
ID int `db:"id"`
Name string`db:"name"`
Email string`db:"email"`
}
func main() {
db, err := sqlx.Connect("sqlite3", "sqlx.db")
if err != nil {
log.Fatal(err)
}
// 查询数据
var user User
err = db.Get(&user, "SELECT * FROM users WHERE id=?", id)
if err != nil {
log.Fatal(err)
}
log.Printf("User: %+v\n", user)
}
三、总结3.SQL增强型库(如 sqlx)在保留 SQL 灵活性的同时,通过扩展封装提升了开发效率,非常适合不喜欢ORM概念的开发者