您好,登錄后才能下訂單哦!
本篇內容主要講解“golang gorm開發架構及怎么寫插件”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“golang gorm開發架構及怎么寫插件”吧!
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)
并且基于當前操作的類型,它將調用注冊的creating
, updating
, querying
, deleting
或row_querying
回調來運行操作。
對于上面的例子,將調用querying
,參考查詢回調
GORM本身由Callbacks
提供支持,因此您可以根據需要完全自定義GORM
func updateCreated(scope *Scope) { if scope.HasColumn("Created") { scope.SetColumn("Created", NowFunc()) } } db.Callback().Create().Register("update_created_at", updateCreated) // 注冊Create進程的回調
db.Callback().Create().Remove("gorm:create") // 從Create回調中刪除`gorm:create`回調
db.Callback().Create().Replace("gorm:create", newCreateFunction) // 使用新函數`newCreateFunction`替換回調`gorm:create`用于創建過程
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)
GORM定義了回調以執行其CRUD操作,在開始編寫插件之前檢查它們。
Create callbacks
Update callbacks
Query callbacks
Delete callbacks
Row Query callbacks Row Query callbacks將在運行Row
或Rows
時被調用,默認情況下沒有注冊的回調,你可以注冊一個新的回調:
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開發架構及怎么寫插件”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。