首頁 > 軟體

golang gorm開發架構及寫外掛範例

2022-04-15 19:00:32

1. 開發

1.1. 架構

Gorm使用可連結的API,*gorm.DB是鏈的橋樑,對於每個鏈API,它將建立一個新的關係。

db, err := gorm.Open("postgres", "user=gorm dbname=gorm sslmode=disable")
// 建立新關係
db = db.Where("name = ?", "jinzhu")
// 過濾更多
if SomeCondition {
    db = db.Where("age = ?", 20)
} else {
    db = db.Where("age = ?", 30)
}
if YetAnotherCondition {
    db = db.Where("active = ?", 1)
}

當我們開始執行任何操作時,GORM將基於當前的*gorm.DB建立一個新的*gorm.Scope範例

// 執行查詢操作
db.First(&user)

並且基於當前操作的型別,它將呼叫註冊的creatingupdatingqueryingdeletingrow_querying回撥來執行操作。

對於上面的例子,將呼叫querying,參考查詢回撥

1.2. 寫外掛

GORM本身由Callbacks提供支援,因此您可以根據需要完全自定義GORM

1.2.1. 註冊新的callback

func updateCreated(scope *Scope) {
    if scope.HasColumn("Created") {
        scope.SetColumn("Created", NowFunc())
    }
}
db.Callback().Create().Register("update_created_at", updateCreated)
// 註冊Create程序的回撥

1.2.2. 刪除現有的callback

db.Callback().Create().Remove("gorm:create")
// 從Create回撥中刪除`gorm:create`回撥

1.2.3. 替換現有的callback

db.Callback().Create().Replace("gorm:create", newCreateFunction)
// 使用新函數`newCreateFunction`替換回撥`gorm:create`用於建立過程

1.2.4. 註冊callback順序

db.Callback().Create().Before("gorm:create").Register("update_created_at", updateCreated)
db.Callback().Create().After("gorm:create").Register("update_created_at", updateCreated)
db.Callback().Query().After("gorm:query").Register("my_plugin:after_query", afterQuery)
db.Callback().Delete().After("gorm:delete").Register("my_plugin:after_delete", afterDelete)
db.Callback().Update().Before("gorm:update").Register("my_plugin:before_update", beforeUpdate)
db.Callback().Create().Before("gorm:create").After("gorm:before_create").Register("my_plugin:before_create", beforeCreate)

1.2.5. 預定義回撥

GORM定義了回撥以執行其CRUD操作,在開始編寫外掛之前檢查它們。

Create callbacks

Update callbacks

Query callbacks

Delete callbacks

Row Query callbacks Row Query callbacks將在執行RowRows時被呼叫,預設情況下沒有註冊的回撥,你可以註冊一個新的回撥:

func updateTableName(scope *gorm.Scope) {
  scope.Search.Table(scope.TableName() + "_draft") // append `_draft` to table name
}
db.Callback().RowQuery().Register("publish:update_table_name", updateTableName)

以上就是golang gorm開發架構及寫外掛範例的詳細內容,更多關於golang gorm開發架構寫外掛的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com