Go語言數(shù)據庫編程GORM 的基本使用詳解
更新時間:2025年06月27日 14:46:39 作者:程序員愛釣魚
GORM是Go語言流行的ORM框架,封裝database/sql,支持自動遷移、關聯(lián)、事務等,提供CRUD、條件查詢、鉤子函數(shù)、日志等功能,簡化數(shù)據庫操作,提升開發(fā)效率,本文給大家介紹Go語言GORM使用,感興趣的朋友一起看看吧
GORM 是 Go 語言最流行的 ORM 框架,封裝了
database/sql,支持自動遷移、關聯(lián)關系、事務等功能,開發(fā)體驗接近于高層語言的 ORM。
一、安裝與初始化
1. 安裝 GORM 及數(shù)據庫驅動
go get -u gorm.io/gorm go get -u gorm.io/driver/mysql # PostgreSQL 用戶: # go get -u gorm.io/driver/postgres
2. 建立數(shù)據庫連接
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ù)據庫失敗:", 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ù)據
user := User{Name: "Alice", Email: "alice@example.com", Age: 25}
db.Create(&user)
fmt.Println("新ID:", user.ID)2. 查詢數(shù)據
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ù)據
db.Model(&user).Update("Name", "Alice Updated")
db.Model(&user).Updates(User{Name: "NewName", Age: 28}) // 多字段4. 刪除數(shù)據
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ù)據庫編程:GORM 的基本使用的文章就介紹到這了,更多相關Go語言GORM使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

