Go語言數(shù)據(jù)庫編程GORM 的基本使用詳解
更新時間:2025年06月27日 14:46:39 作者:程序員愛釣魚
GORM是Go語言流行的ORM框架,封裝database/sql,支持自動遷移、關聯(lián)、事務等,提供CRUD、條件查詢、鉤子函數(shù)、日志等功能,簡化數(shù)據(jù)庫操作,提升開發(fā)效率,本文給大家介紹Go語言GORM使用,感興趣的朋友一起看看吧
GORM 是 Go 語言最流行的 ORM 框架,封裝了
database/sql
,支持自動遷移、關聯(lián)關系、事務等功能,開發(fā)體驗接近于高層語言的 ORM。
一、安裝與初始化
1. 安裝 GORM 及數(shù)據(jù)庫驅動
go get -u gorm.io/gorm go get -u gorm.io/driver/mysql # PostgreSQL 用戶: # go get -u gorm.io/driver/postgres
2. 建立數(shù)據(jù)庫連接
package main import ( "gorm.io/driver/mysql" "gorm.io/gorm" "log" ) func main() { dsn := "user:password@tcp(127.0.0.1:3306)/gormdb?charset=utf8mb4&parseTime=True&loc=Local" db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil { log.Fatal("連接數(shù)據(jù)庫失敗:", err) } log.Println("連接成功") }
二、定義模型結構體
type User struct { ID uint `gorm:"primaryKey"` Name string Email string `gorm:"uniqueIndex"` Age int CreatedAt time.Time }
- • 使用 GORM 標簽配置字段屬性。
- • 支持自動創(chuàng)建
id
、created_at
等字段。
三、自動遷移表結構
db.AutoMigrate(&User{})
? 會自動創(chuàng)建表,如果表存在則進行字段比對與升級(非破壞性)。
四、基本 CRUD 操作
1. 新增數(shù)據(jù)
user := User{Name: "Alice", Email: "alice@example.com", Age: 25} db.Create(&user) fmt.Println("新ID:", user.ID)
2. 查詢數(shù)據(jù)
var user User db.First(&user, 1) // 主鍵查詢 db.First(&user, "email = ?", "alice@example.com") // 條件查詢
- •
First
:查詢一條 - •
Find
:查詢多條 - •
Where
支持鏈式調用:
var users []User db.Where("age > ?", 20).Order("age desc").Limit(10).Find(&users)
3. 更新數(shù)據(jù)
db.Model(&user).Update("Name", "Alice Updated") db.Model(&user).Updates(User{Name: "NewName", Age: 28}) // 多字段
4. 刪除數(shù)據(jù)
db.Delete(&user)
五、條件構造器
GORM 支持各種鏈式條件語句:
db.Where("name LIKE ?", "%alice%").Find(&users) db.Where("age BETWEEN ? AND ?", 20, 30).Find(&users) db.Not("name = ?", "Bob").Find(&users)
六、鉤子函數(shù)(Hooks)
你可以定義方法攔截模型的創(chuàng)建、更新、刪除行為:
func (u *User) BeforeCreate(tx *gorm.DB) (err error) { u.Name = "【新建】" + u.Name return }
七、事務處理
err := db.Transaction(func(tx *gorm.DB) error { if err := tx.Create(&User{Name: "TxUser"}).Error; err != nil { return err } if err := tx.Delete(&User{}, 1).Error; err != nil { return err } return nil })
八、日志與調試
GORM 支持 SQL 日志:
import "gorm.io/gorm/logger" db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{ Logger: logger.Default.LogMode(logger.Info), })
九、常用配置項
配置 | 說明 |
Create , First , Find , Delete , Update | 基礎 CRUD |
Where , Order , Limit , Offset | 鏈式構造條件 |
AutoMigrate | 自動建表/更新表結構 |
Model(&Model{}) | 設置操作對象 |
十、小結
功能 | 示例 |
創(chuàng)建表 | db.AutoMigrate(&User{}) |
插入 | db.Create(&user) |
查詢 | db.First , db.Where().Find |
更新 | db.Model().Updates() |
刪除 | db.Delete(&user) |
事務 | db.Transaction(func) |
到此這篇關于Go語言數(shù)據(jù)庫編程:GORM 的基本使用的文章就介紹到這了,更多相關Go語言GORM使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!