github.com/jinzhu/gorm
是 Go 語言中一個非常流行的 ORM(對象關系映射)庫,用于簡化與關系型數據庫的交互。以下是關于它的關鍵信息:
核心特點
-
全功能 ORM
- 支持主流數據庫:MySQL、PostgreSQL、SQLite、SQL Server 等。
- 通過結構體(Struct)映射數據庫表,自動處理數據類型轉換。
-
鏈式 API
提供流暢的鏈式調用方法,例如:db.Where("name = ?", "jinzhu").First(&user)
-
自動遷移
可根據模型自動創建或更新數據庫表結構:db.AutoMigrate(&User{})
-
關聯支持
簡化一對多、多對多等關聯關系操作:type User struct {gorm.ModelCreditCards []CreditCard // 一對多 }
-
事務與鉤子
- 支持數據庫事務。
- 提供
BeforeSave
、AfterCreate
等生命周期鉤子。
-
查詢構建器
支持復雜查詢、預加載(Preload)、原生 SQL 等。
狀態與替代方案
- 原倉庫已歸檔:原作者 Jinzhu 已停止維護
gorm
(v1 版本),并推薦使用新版 gorm.io/gorm(即 GORM v2)。 - GORM v2 改進:
- 性能優化。
- 支持上下文(Context)。
- 更清晰的 API 設計。
基本使用示例
package mainimport ("gorm.io/gorm""gorm.io/driver/sqlite"
)type User struct {gorm.ModelName stringAge int
}func main() {db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})if err != nil {panic("連接數據庫失敗")}// 自動遷移db.AutoMigrate(&User{})// 創建記錄db.Create(&User{Name: "Alice", Age: 30})// 查詢var user Userdb.First(&user, "name = ?", "Alice")
}
何時選擇 GORM?
- 適合:需要快速開發、避免手寫 SQL 的場景。
- 不適合:對性能極致要求或需高度定制化 SQL 的情況(可搭配原生
database/sql
使用)。
總結
- 如果你是新項目,建議直接使用 GORM v2。
- 學習資源:官方文檔(含中文)詳細,社區活躍,適合快速上手 ORM 開發。