亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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)建 idcreated_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),
})

九、常用配置項

配置說明
CreateFirstFindDeleteUpdate基礎 CRUD
WhereOrderLimitOffset鏈式構造條件
AutoMigrate自動建表/更新表結構
Model(&Model{})設置操作對象

十、小結

功能示例
創(chuàng)建表db.AutoMigrate(&User{})
插入db.Create(&user)
查詢db.Firstdb.Where().Find
更新db.Model().Updates()
刪除db.Delete(&user)
事務db.Transaction(func)

到此這篇關于Go語言數(shù)據(jù)庫編程:GORM 的基本使用的文章就介紹到這了,更多相關Go語言GORM使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 在Go語言中使用JSON的方法

    在Go語言中使用JSON的方法

    這篇文章主要介紹了在Go語言中使用JSON的相關資料,需要的朋友可以參考下
    2018-02-02
  • Go語言LeetCode題解1046最后一塊石頭的重量

    Go語言LeetCode題解1046最后一塊石頭的重量

    這篇文章主要為大家介紹了Go語言LeetCode題解1046最后一塊石頭的重量,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • 淺析Go中原子操作的重要性與使用

    淺析Go中原子操作的重要性與使用

    這篇文章主要帶大家一起探索?Go?中原子操作的概念,了解為什么它們是重要的,以及如何有效地使用它們,文中的示例代碼講解詳細,需要的可以了解下
    2023-11-11
  • golang中的三個點 ''...''的用法示例詳解

    golang中的三個點 ''...''的用法示例詳解

    這篇文章主要介紹了golang中的三個點 '...' 的用法示例詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Go Gin中間件的具體使用

    Go Gin中間件的具體使用

    中間件是Gin框架中的一個重要概念,它可以用來處理HTTP請求和響應,或者在處理請求之前和之后執(zhí)行一些操作,本文主要介紹了Go Gin中間件的具體使用,感興趣的可以了解一下
    2023-11-11
  • Go有效獲取變量類型多種方法探索

    Go有效獲取變量類型多種方法探索

    這篇文章主要介紹了Go有效獲取變量類型的多種方法探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-02-02
  • go語言beego框架web開發(fā)語法筆記示例

    go語言beego框架web開發(fā)語法筆記示例

    這篇文章主要為大家介紹了go語言beego框架web開發(fā)語法筆記示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • Go基礎Slice教程詳解

    Go基礎Slice教程詳解

    這篇文章主要介紹了Go基礎Slice教程詳解,需要的朋友可以參考下
    2018-02-02
  • golang程序進度條實現(xiàn)示例詳解

    golang程序進度條實現(xiàn)示例詳解

    這篇文章主要為大家介紹了golang程序實現(xiàn)進度條示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Go語言范圍Range的具體使用

    Go語言范圍Range的具體使用

    range關鍵字在for循環(huán)中用于遍歷數(shù)組,切片,通道或映射的項目,本文主要介紹了Go語言范圍Range的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01

最新評論