在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何在Go中給GORM模型添加枚舉類型

馬哥Linux運維 ? 來源:稀土掘金技術社區 ? 2023-11-28 15:36 ? 次閱讀

GORM中的枚舉介紹

GORM是一個流行的Go ORM,它允許我們定義結構體來表示數據庫表,并提供一個接口來執行CRUD操作。枚舉在編程中是一個有用的特性,它允許我們定義一個變量可以取的固定值集。在這篇文章中,我們將探索如何向GORM模型添加枚舉。

第一步:定義枚舉

首先,我們需要定義枚舉值的類型。在Go中,我們可以用string類型來定義枚舉。如下:


type Status string


const (
    Pending Status = "pending"
    Approved Status = "approved"
    Rejected Status = "rejected"
)

在該示例中,我們定義了枚舉類型Status,該類型有3個枚舉值:"pending","approved", "rejectd"。

第二步:定義模型

其次,我們需要定義一個gorm模型來使用該枚舉類型。如下:


type User struct {
    ID        uint   `gorm:"primary_key"`
    Name      string
    Status    Status
    CreatedAt time.Time
    UpdatedAt time.Time
}

在該示例中,User模型中有一個枚舉類型Status的字段。

第三步:在gorm操作中使用枚舉

在定義了枚舉類型和gorm模型后,我們就可以在gorm的操作中使用枚舉類型了。如下:


user := User{Name: "John", Status: Pending}
db.Create(&user)




var users []User
db.Where("status = ?", Approved).Find(&users)




db.Model(&user).Update("status", Rejected)




db.Where("status = ?", Pending).Delete(User{})

在上面的示例中,我們在gorm的創建、查詢、更新和刪除操作中都使用到了Status的枚舉類型。

那么,我們看看在go中有哪些常見的定義枚舉的方法。

方法一:使用字符串類型

在模型中,我們可以是通過使用字符串類型來替代枚舉類型。如下:


type User struct {
  ID   uint
  Role string
}

在該示例中,我們可以使用Role這個字符串類型來表示不同的用戶角色,比如“admin”,“moderator”以及“user”等等。

但這種方式也有缺點,比如容易出現拼寫錯誤,沒有類型的約束。

方法二:自定義類型

另外一種替代枚舉類型的方法是通過自定義類型來代表枚舉值。如下:


type Role string


const (
  Admin     Role = "admin"
  Moderator Role = "moderator"
  User      Role = "user"
)


type User struct {
  ID   uint
  Role Role
}

在這個示例中,Role類型被定義成了字符串的別名。然后,不同的角色值以常量的形式定義。最后,在User模型中的Role字段中使用了Role類型。

這種方法的優點是可以做編譯時檢查,因此不容易出現拼寫錯誤。同時,該種方法還將值限制在了Role類型下。

方法三:使用GORM提供的枚舉類進

Gorm提供了內建的枚舉類型。如下:


type Role string


const (
  Admin     Role = "admin"
  Moderator Role = "moderator"
  User      Role = "user"
)


type User struct {
  ID   uint
  Role Role `gorm:"type:enum('admin', 'moderator', 'user')"`
}

在該示例中,Role類型被定義成string類型的別名成為一個新的類型,同時Role的值通過常量定義。在User的模型中,又通過gorm的標簽來限制了該字段值的范圍。

這種方法和方法二中的方式具有相同的優點,同時該方法還能讓通過gorm創建數據表時,讓數據表的字段也是enum類型的優點。

結論

在本文中,我們探討了如何在Go中給GORM模型添加枚舉類型。枚舉是一個有用的功能,它允許我們定義變量可以取的一組固定值。通過在GORM模型中使用枚舉,我們可以提高代碼的類型安全性,使數據庫操作更加可靠。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編程
    +關注

    關注

    88

    文章

    3668

    瀏覽量

    94575
  • 模型
    +關注

    關注

    1

    文章

    3444

    瀏覽量

    49696
  • 枚舉
    +關注

    關注

    0

    文章

    16

    瀏覽量

    4671

原文標題:gorm中如何使用枚舉值

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    何在SlaveFifoSync例程添加HID設備枚舉

    devices and video and video devices at the same time?的內容,添加了HID相關的描述符,添加了hid設備的端口配置和DMA通道配置以及hid的線程。但是
    發表于 02-28 06:31

    labview小白求教枚舉類型控件

    學習labview還才3天,看的書是《labview寶典》,現在正好看到78頁,關于“獲取日期/時間字符串”函數,其中說到日期格式是枚舉類型,但是我實際測試,枚舉控件插入了三個項,值
    發表于 12-20 21:01

    枚舉類型最后面增加項報錯

    各位大神:我的枚舉類型RadioState,在最后面增加一項,之后程序很多用到RadioState的地方報錯,這個是什么原因造成的?下圖是我沒有改之前的枚舉
    發表于 05-15 12:02

    何在Allegro添加模型

    allegro這個怎么樣添加模型
    發表于 08-01 05:35

    在Allegro軟件添加xnet的具體步驟

    點擊需要設置Xnet模型的元器件,右側對應列表中會同步進行選中,也可以將同一類型的全部選中,如圖5-114所示;    Xnet是什么含義,如何在Allegro軟件
    發表于 09-07 17:57

    何在uclinux添加自己應用程序的詳細過程

    何在uclinux添加自己應用程序的詳細過程
    發表于 03-28 09:48 ?20次下載

    深入理解java枚舉類型enum用法

    ; StringFRI = Fri; StringSAT = Sat; StringSUN = Sun; } 語法(定義) 創建枚舉類型要使用 enum 關鍵字,隱含了所創建的類型都是 java.lang.Enum 類
    發表于 09-27 11:49 ?0次下載

    go語言枚舉類型怎么用

    、 java 等,都有原生支持。在 go ,大家卻找不到 enum 或者其它直接用來聲明枚舉類型的關鍵字。從熟悉其它編程語言的開發者轉用 go
    的頭像 發表于 09-02 09:43 ?5332次閱讀

    SystemVerilog枚舉類型的使用建議

    SystemVerilog枚舉類型雖然屬于一種“強類型”,但是枚舉類型還是提供了一些“不正經”
    的頭像 發表于 09-01 14:20 ?1916次閱讀

    淺析SystemVerilog枚舉類型

    枚舉類型定義了一組具有名稱的值,在沒有指定值時默認是int型數值。
    的頭像 發表于 10-13 09:44 ?1894次閱讀

    枚舉類型的簡單擴展學習

    定義枚舉類型的值只能是整型常量,正數、負數和零都可以,但不可以是浮點數
    的頭像 發表于 05-25 15:45 ?736次閱讀

    何在Vivado添加時序約束呢?

    今天介紹一下,如何在Vivado添加時序約束,Vivado添加約束的方法有3種:xdc文件、時序約束向導(Constraints Wizard)、時序約束編輯器(Edit Timin
    的頭像 發表于 06-26 15:21 ?4813次閱讀
    如<b class='flag-5'>何在</b>Vivado<b class='flag-5'>中</b><b class='flag-5'>添加</b>時序約束呢?

    Java枚舉的特點及用法

    在 Java 枚舉出現之前,通常會使用常量類來表示一組固定的常量值,直到Java 1.5之后推出了枚舉,那么枚舉類型有哪些特點,它比常量類又好在哪里呢。 本文將分析一下
    的頭像 發表于 09-30 10:02 ?1778次閱讀

    java switch case值能為枚舉值嗎

    Java的switch語句可以接受枚舉類型的值作為參數。在Java枚舉是一種特殊的數據類型
    的頭像 發表于 11-30 14:41 ?5907次閱讀

    枚舉有多大?c語言枚舉end的作用是什么?

    枚舉有多大?c語言枚舉end的作用是什么? 枚舉在C語言中是一種常見的數據類型,用于定義一組相互關聯的常量或者變量。它通常用于表示一系列可能的取值,使得程序更加易讀和易維護。在C語言中
    的頭像 發表于 01-19 14:19 ?775次閱讀
    主站蜘蛛池模板: 皇帝受h啪肉np文 | 国产精品免费拍拍拍 | 午夜看看 | 四虎黄色| 国产精品久久永久免费 | 91日韩精品天海翼在线观看 | 成人国产一区 | 亚洲jizzjizz中文在线播放 | 香蕉久久夜色精品国产小说 | 日本高清加勒比 | 国产精品美乳在线观看 | 九九99久久精品午夜剧场免费 | 夜夜夜精品视频免费 | 黄 色 片 在 线 看 | 在线色播| 国产成人毛片毛片久久网 | 日韩日韩 | 午夜爽爽性刺激一区二区视频 | 日本在线黄色 | bt种子在线搜索 | 伊人精品成人久久综合欧美 | bt种子在线搜索 | 依依成人精品无v国产 | 高清性色生活片久久久 | 扒开末成年粉嫩的流白浆视频 | 久久久久久久国产精品电影 | 亚洲一级毛片免费观看 | 成人久久久精品乱码一区二区三区 | 521色香蕉网在线观看免费 | 丁香婷婷亚洲六月综合色 | 天天色成人网 | 久久大香线蕉综合爱 | 一级骚片超级骚在线观看 | 免费aⅴ网站 | 久久精品综合网 | 天天激情 | bt种子天堂 | 欧美黄色三级视频 | 成人a在线 | 日韩一级特黄毛片在线看 | 免费91视频 |