最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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是鏈的橋梁,對(duì)于每個(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")
// 過(guò)濾更多
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)用注冊(cè)的creatingupdatingqueryingdeletingrow_querying回調(diào)來(lái)運(yùn)行操作。

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

1.2. 寫插件

GORM本身由Callbacks提供支持,因此您可以根據(jù)需要完全自定義GORM

1.2.1. 注冊(cè)新的callback

func updateCreated(scope *Scope) {
    if scope.HasColumn("Created") {
        scope.SetColumn("Created", NowFunc())
    }
}
db.Callback().Create().Register("update_created_at", updateCreated)
// 注冊(cè)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)建過(guò)程

1.2.4. 注冊(cè)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)情況下沒(méi)有注冊(cè)的回調(diào),你可以注冊(cè)一個(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)寫插件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Go?runtime?調(diào)度器之系統(tǒng)調(diào)用引起的搶占

    Go?runtime?調(diào)度器之系統(tǒng)調(diào)用引起的搶占

    本文解析了在Go語(yǔ)言中,當(dāng)goroutine執(zhí)行的系統(tǒng)調(diào)用時(shí)間過(guò)長(zhǎng)時(shí),系統(tǒng)如何通過(guò)監(jiān)控和搶占機(jī)制來(lái)處理,以維持運(yùn)行效率和資源分配的平衡,通過(guò)具體的示例和流程圖,詳細(xì)展示了系統(tǒng)調(diào)用過(guò)程中的搶占操作,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • VSCode1.4 搭建Golang的開發(fā)調(diào)試環(huán)境(遇到很多問(wèn)題)

    VSCode1.4 搭建Golang的開發(fā)調(diào)試環(huán)境(遇到很多問(wèn)題)

    這篇文章主要介紹了VSCode1.4 搭建Golang的開發(fā)調(diào)試環(huán)境(遇到很多問(wèn)題),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Golang實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)Stack(堆棧)的示例詳解

    Golang實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)Stack(堆棧)的示例詳解

    在計(jì)算機(jī)科學(xué)中,stack(棧)是一種基本的數(shù)據(jù)結(jié)構(gòu),它是一種線性結(jié)構(gòu),具有后進(jìn)先出(Last In First Out)的特點(diǎn)。本文將通過(guò)Golang實(shí)現(xiàn)堆棧,需要的可以參考一下
    2023-04-04
  • 盤點(diǎn)幾種Go語(yǔ)言開發(fā)的IDE

    盤點(diǎn)幾種Go語(yǔ)言開發(fā)的IDE

    Go語(yǔ)言作為一種新興的編程語(yǔ)言,近年來(lái)受到了越來(lái)越多的關(guān)注,它以其簡(jiǎn)潔、高效和并發(fā)性能而聞名,被廣泛應(yīng)用于各種軟件開發(fā)項(xiàng)目中,本文將介紹幾種常用的Go語(yǔ)言IDE,并對(duì)它們進(jìn)行比較,幫助開發(fā)者根據(jù)自己的需求選擇合適的工具,需要的朋友可以參考下
    2023-11-11
  • Go語(yǔ)言并發(fā)控制之semaphore的原理與使用

    Go語(yǔ)言并發(fā)控制之semaphore的原理與使用

    這篇文章主要為大家詳細(xì)介紹了Go官方庫(kù)x中提供的擴(kuò)展并發(fā)原語(yǔ)?semaphore,譯為“信號(hào)量”,文中介紹了它的原理與使用,需要的可以了解下
    2025-02-02
  • 詳解Golang中channel的實(shí)現(xiàn)

    詳解Golang中channel的實(shí)現(xiàn)

    channel俗稱管道,用于數(shù)據(jù)傳遞或數(shù)據(jù)共享,其本質(zhì)是一個(gè)先進(jìn)先出的隊(duì)列,使用goroutine+channel進(jìn)行數(shù)據(jù)通訊簡(jiǎn)單高效,同時(shí)也線程安全,本文就給大家講講Golang中channel的實(shí)現(xiàn),需要的朋友可以參考下
    2023-09-09
  • Golang反射獲取結(jié)構(gòu)體的值和修改值的代碼示例

    Golang反射獲取結(jié)構(gòu)體的值和修改值的代碼示例

    這篇文章主要給大家介紹了golang反射獲取結(jié)構(gòu)體的值和修改值的代碼示例及演示效果,對(duì)我們的學(xué)習(xí)或工作有一定的幫助,感興趣的同學(xué)可以參考閱讀本文
    2023-08-08
  • 一文帶你學(xué)會(huì)Go?select語(yǔ)句輕松實(shí)現(xiàn)高效并發(fā)

    一文帶你學(xué)會(huì)Go?select語(yǔ)句輕松實(shí)現(xiàn)高效并發(fā)

    這篇文章主要為大家詳細(xì)介紹了Golang中select語(yǔ)句的用法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Golang有一定的幫助,需要的可以參考一下
    2023-03-03
  • Skywalking-go自動(dòng)監(jiān)控增強(qiáng)使用探究

    Skywalking-go自動(dòng)監(jiān)控增強(qiáng)使用探究

    這篇文章主要介紹了Skywalking-go自動(dòng)監(jiān)控增強(qiáng)使用深入探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • go語(yǔ)言代碼生成器code?generator使用示例介紹

    go語(yǔ)言代碼生成器code?generator使用示例介紹

    這篇文章主要為大家介紹了go語(yǔ)言代碼生成器code?generator的使用簡(jiǎn)單介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05

最新評(píng)論

无棣县| 巴塘县| 罗源县| 巴里| 志丹县| 胶南市| 全椒县| 营口市| 芜湖县| 玉树县| 周至县| 共和县| 哈巴河县| 革吉县| 屏南县| 水城县| 四平市| 武功县| 讷河市| 灵宝市| 新民市| 白水县| 岑巩县| 晋州市| 江山市| 禹州市| 通江县| 霍城县| 栾城县| 法库县| 丁青县| 赤水市| 遂溪县| 沾化县| 西丰县| 仙游县| 旌德县| 望城县| 乐安县| 高清| 长武县|