Go語(yǔ)言之ORM(對(duì)象關(guān)系映射)庫(kù)詳解
github.com/jinzhu/gorm 是 Go 語(yǔ)言中一個(gè)非常流行的 ORM(對(duì)象關(guān)系映射)庫(kù),用于簡(jiǎn)化與關(guān)系型數(shù)據(jù)庫(kù)的交互。
以下是關(guān)于它的關(guān)鍵信息:
核心特點(diǎn)
全功能 ORM
- 支持主流數(shù)據(jù)庫(kù):MySQL、PostgreSQL、SQLite、SQL Server 等。
- 通過(guò)結(jié)構(gòu)體(Struct)映射數(shù)據(jù)庫(kù)表,自動(dòng)處理數(shù)據(jù)類型轉(zhuǎn)換。
鏈?zhǔn)?API
提供流暢的鏈?zhǔn)秸{(diào)用方法,例如:
db.Where("name = ?", "jinzhu").First(&user)
自動(dòng)遷移
可根據(jù)模型自動(dòng)創(chuàng)建或更新數(shù)據(jù)庫(kù)表結(jié)構(gòu):
db.AutoMigrate(&User{})
關(guān)聯(lián)支持
簡(jiǎn)化一對(duì)多、多對(duì)多等關(guān)聯(lián)關(guān)系操作:
type User struct {
gorm.Model
CreditCards []CreditCard // 一對(duì)多
}
事務(wù)與鉤子
- 支持?jǐn)?shù)據(jù)庫(kù)事務(wù)。
- 提供
BeforeSave、AfterCreate等生命周期鉤子。
查詢構(gòu)建器
- 支持復(fù)雜查詢、預(yù)加載(Preload)、原生 SQL 等。
狀態(tài)與替代方案
原倉(cāng)庫(kù)已歸檔:原作者 Jinzhu 已停止維護(hù) gorm(v1 版本),并推薦使用新版 gorm.io/gorm(即 GORM v2)。
GORM v2 改進(jìn):
- 性能優(yōu)化。
- 支持上下文(Context)。
- 更清晰的 API 設(shè)計(jì)。
基本使用示例
package main
import (
"gorm.io/gorm"
"gorm.io/driver/sqlite"
)
type User struct {
gorm.Model
Name string
Age int
}
func main() {
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
panic("連接數(shù)據(jù)庫(kù)失敗")
}
// 自動(dòng)遷移
db.AutoMigrate(&User{})
// 創(chuàng)建記錄
db.Create(&User{Name: "Alice", Age: 30})
// 查詢
var user User
db.First(&user, "name = ?", "Alice")
}
何時(shí)選擇 GORM?
- 適合:需要快速開(kāi)發(fā)、避免手寫 SQL 的場(chǎng)景。
- 不適合:對(duì)性能極致要求或需高度定制化 SQL 的情況(可搭配原生
database/sql使用)。
總結(jié)
- 如果你是新項(xiàng)目,建議直接使用 GORM v2。
- 學(xué)習(xí)資源:官方文檔(含中文)詳細(xì),社區(qū)活躍,適合快速上手 ORM 開(kāi)發(fā)。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Go語(yǔ)言中new和make關(guān)鍵字的區(qū)別
本篇文章來(lái)介紹一道非常常見(jiàn)的面試題,到底有多常見(jiàn)呢?可能很多面試的開(kāi)場(chǎng)白就是由此開(kāi)始的。那就是 new 和 make 這兩個(gè)內(nèi)置函數(shù)的區(qū)別,希望對(duì)大家有所幫助2023-03-03
golang使用iconv報(bào)undefined:XXX的問(wèn)題處理方案
這篇文章主要介紹了golang使用iconv報(bào)undefined:XXX的問(wèn)題處理方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
Golang 性能基準(zhǔn)測(cè)試(benchmark)詳解
Golang性能基準(zhǔn)測(cè)試可以幫助開(kāi)發(fā)人員比較不同的實(shí)現(xiàn)方式對(duì)性能的影響,以便優(yōu)化程序,本文就來(lái)講解一下如何使用Golang的性能基準(zhǔn)測(cè)試功能,需要的朋友可以參考下2023-06-06
golang中sync.Mutex的實(shí)現(xiàn)方法
本文主要介紹了golang中sync.Mutex的實(shí)現(xiàn)方法,mutex?主要有兩個(gè)?method:?Lock()?和?Unlock(),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
在Go語(yǔ)言單元測(cè)試中解決HTTP網(wǎng)絡(luò)依賴問(wèn)題
在 Go 語(yǔ)言中,我們需要找到一種可靠的方法來(lái)測(cè)試 HTTP 請(qǐng)求和響應(yīng),本文將探討在 Go 中進(jìn)行 HTTP 應(yīng)用測(cè)試時(shí),如何解決應(yīng)用程序的依賴問(wèn)題,以確保我們能夠編寫出可靠的測(cè)試用例,需要的朋友可以參考下2023-07-07
一文帶你揭秘Go中new()和make()函數(shù)的區(qū)別和用途
Go(或 Golang)是一種現(xiàn)代、靜態(tài)類型、編譯型的編程語(yǔ)言,專為構(gòu)建可擴(kuò)展、并發(fā)和高效的軟件而設(shè)計(jì),它提供了各種內(nèi)置的函數(shù)和特性,幫助開(kāi)發(fā)人員編寫簡(jiǎn)潔高效的代碼,在本博客文章中,我們將探討 new() 和 make() 函數(shù)之間的區(qū)別,了解何時(shí)以及如何有效地使用它們2023-10-10

