91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

golang?gorm開發架構及怎么寫插件

發布時間:2022-04-16 09:10:17 來源:億速云 閱讀:248 作者:iii 欄目:開發技術

本篇內容主要講解“golang gorm開發架構及怎么寫插件”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“golang gorm開發架構及怎么寫插件”吧!

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開發架構及怎么寫插件”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

柳河县| 朝阳区| 东城区| 犍为县| 丰原市| 伊宁市| 新安县| 南部县| 诸暨市| 承德县| 阳西县| 海城市| 天峨县| 沭阳县| 崇信县| 襄樊市| 清河县| 兰西县| 深水埗区| 余干县| 武定县| 大安市| 台南市| 明水县| 长顺县| 盐山县| 乳山市| 宁阳县| 嘉定区| 措勤县| 赣州市| 浏阳市| 湖南省| 仪陇县| 泊头市| 江川县| 中牟县| 巴彦淖尔市| 衡山县| 元江| 古田县|