欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang?gorm開發(fā)架構(gòu)及寫插件示例

 更新時(shí)間:2022年04月15日 17:15:05   作者:Jeff的技術(shù)棧  
這篇文章主要為大家介紹了golang?gorm開發(fā)架構(gòu)及寫插件的詳細(xì)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪

1. 開發(fā)

1.1. 架構(gòu)

Gorm使用可鏈接的API,*gorm.DB是鏈的橋梁,對于每個(gè)鏈API,它將創(chuàng)建一個(gè)新的關(guān)系。

db, err := gorm.Open("postgres", "user=gorm dbname=gorm sslmode=disable")
// 創(chuàng)建新關(guān)系
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)
}

當(dāng)我們開始執(zhí)行任何操作時(shí),GORM將基于當(dāng)前的*gorm.DB創(chuàng)建一個(gè)新的*gorm.Scope實(shí)例

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

并且基于當(dāng)前操作的類型,它將調(diào)用注冊的creatingupdatingqueryingdeletingrow_querying回調(diào)來運(yùn)行操作。

對于上面的例子,將調(diào)用querying,參考查詢回調(diào)

1.2. 寫插件

GORM本身由Callbacks提供支持,因此您可以根據(jù)需要完全自定義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進(jìn)程的回調(diào)

1.2.2. 刪除現(xiàn)有的callback

db.Callback().Create().Remove("gorm:create")
// 從Create回調(diào)中刪除`gorm:create`回調(diào)

1.2.3. 替換現(xiàn)有的callback

db.Callback().Create().Replace("gorm:create", newCreateFunction)
// 使用新函數(shù)`newCreateFunction`替換回調(diào)`gorm:create`用于創(chuàng)建過程

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. 預(yù)定義回調(diào)

GORM定義了回調(diào)以執(zhí)行其CRUD操作,在開始編寫插件之前檢查它們。

Create callbacks

Update callbacks

Query callbacks

Delete callbacks

Row Query callbacks Row Query callbacks將在運(yùn)行RowRows時(shí)被調(diào)用,默認(rèn)情況下沒有注冊的回調(diào),你可以注冊一個(gè)新的回調(diào):

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開發(fā)架構(gòu)及寫插件示例的詳細(xì)內(nèi)容,更多關(guān)于golang gorm開發(fā)架構(gòu)寫插件的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 利用go語言實(shí)現(xiàn)查找二叉樹中的最大寬度

    利用go語言實(shí)現(xiàn)查找二叉樹中的最大寬度

    這篇文章主要介紹了利用go語言實(shí)現(xiàn)查找二叉樹中的最大寬度,文章圍繞主題展開詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • GO項(xiàng)目實(shí)戰(zhàn)之Gorm格式化時(shí)間字段實(shí)現(xiàn)

    GO項(xiàng)目實(shí)戰(zhàn)之Gorm格式化時(shí)間字段實(shí)現(xiàn)

    GORM自帶的time.Time類型JSON默認(rèn)輸出RFC3339Nano格式的,下面這篇文章主要給大家介紹了關(guān)于GO項(xiàng)目實(shí)戰(zhàn)之Gorm格式化時(shí)間字段實(shí)現(xiàn)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • 深入解析Go語言編程中的遞歸使用

    深入解析Go語言編程中的遞歸使用

    這篇文章主要介紹了Go語言編程中的遞歸使用,是Go語言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11
  • Golang標(biāo)準(zhǔn)庫unsafe源碼解讀

    Golang標(biāo)準(zhǔn)庫unsafe源碼解讀

    這篇文章主要為大家介紹了Golang標(biāo)準(zhǔn)庫unsafe源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • golang fmt占位符的使用詳解

    golang fmt占位符的使用詳解

    這篇文章主要介紹了golang fmt占位符的使用詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • GoFrame框架gset使用對比PHP?Java?Redis優(yōu)勢

    GoFrame框架gset使用對比PHP?Java?Redis優(yōu)勢

    這篇文章主要為大家介紹了GoFrame框架gset對比PHP?Java?Redis的使用優(yōu)勢詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Go語言操作etcd的示例詳解

    Go語言操作etcd的示例詳解

    etcd是使用Go語言開發(fā)的一個(gè)開源的、高可用的分布式key—value存儲(chǔ)系統(tǒng),可以用于配置共享和服務(wù)的注冊和發(fā)現(xiàn),下面我們就來看看Go語言是如何操作etcd的吧
    2024-03-03
  • 詳解Go語言中net/http包的使用

    詳解Go語言中net/http包的使用

    Go語言內(nèi)置的?net/http?包十分的優(yōu)秀,提供了HTTP客戶端和服務(wù)端的實(shí)現(xiàn),本文主要就來和大家聊聊net/http包的使用,感興趣的可以了解一下
    2023-07-07
  • 詳解Go 結(jié)構(gòu)體格式化輸出

    詳解Go 結(jié)構(gòu)體格式化輸出

    這篇文章主要介紹了Go 結(jié)構(gòu)體格式化輸出的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)go語言,感興趣的朋友可以了解下
    2020-08-08
  • golang監(jiān)聽ip數(shù)據(jù)包的實(shí)現(xiàn)步驟(golang純享版)

    golang監(jiān)聽ip數(shù)據(jù)包的實(shí)現(xiàn)步驟(golang純享版)

    這篇文章主要給大家介紹了golang監(jiān)聽ip數(shù)據(jù)包的實(shí)現(xiàn)步驟,本文以ip4 作為案例進(jìn)行包抓取示范,ip6抓取與ip4方式異曲同工,可自行舉一反三得出,文中通過圖文結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02

最新評論