RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

馬哥Linux運(yùn)維 ? 來源:稀土掘金技術(shù)社區(qū) ? 2023-11-28 15:36 ? 次閱讀

GORM中的枚舉介紹

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

第一步:定義枚舉

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


type Status string


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

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

第二步:定義模型

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


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

在該示例中,User模型中有一個(gè)枚舉類型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{})

在上面的示例中,我們?cè)趃orm的創(chuàng)建、查詢、更新和刪除操作中都使用到了Status的枚舉類型。

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

方法一:使用字符串類型

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


type User struct {
  ID   uint
  Role string
}

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

但這種方式也有缺點(diǎn),比如容易出現(xiàn)拼寫錯(cuò)誤,沒有類型的約束。

方法二:自定義類型

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


type Role string


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


type User struct {
  ID   uint
  Role Role
}

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

這種方法的優(yōu)點(diǎn)是可以做編譯時(shí)檢查,因此不容易出現(xiàn)拼寫錯(cuò)誤。同時(shí),該種方法還將值限制在了Role類型下。

方法三:使用GORM提供的枚舉類進(jìn)

Gorm提供了內(nèi)建的枚舉類型。如下:


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類型的別名成為一個(gè)新的類型,同時(shí)Role的值通過常量定義。在User的模型中,又通過gorm的標(biāo)簽來限制了該字段值的范圍。

這種方法和方法二中的方式具有相同的優(yōu)點(diǎn),同時(shí)該方法還能讓通過gorm創(chuàng)建數(shù)據(jù)表時(shí),讓數(shù)據(jù)表的字段也是enum類型的優(yōu)點(diǎn)。

結(jié)論

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

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3614

    瀏覽量

    93685
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3226

    瀏覽量

    48807
  • 枚舉
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    4586

原文標(biāo)題:gorm中如何使用枚舉值

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    何在SlaveFifoSync例程添加HID設(shè)備枚舉?

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

    labview小白求教枚舉類型控件

    學(xué)習(xí)labview還才3天,看的書是《labview寶典》,現(xiàn)在正好看到78頁(yè),關(guān)于“獲取日期/時(shí)間字符串”函數(shù),其中說到日期格式是枚舉類型,但是我實(shí)際測(cè)試,枚舉控件插入了三個(gè)項(xiàng),值
    發(fā)表于 12-20 21:01

    枚舉類型最后面增加項(xiàng)報(bào)錯(cuò)

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

    何在Allegro添加模型?

    allegro這個(gè)怎么樣添加模型
    發(fā)表于 08-01 05:35

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

    點(diǎn)擊需要設(shè)置Xnet模型的元器件,右側(cè)對(duì)應(yīng)列表中會(huì)同步進(jìn)行選中,也可以將同一類型的全部選中,如圖5-114所示;    Xnet是什么含義,如何在Allegro軟件
    發(fā)表于 09-07 17:57

    何在uclinux添加自己應(yīng)用程序的詳細(xì)過程

    何在uclinux添加自己應(yīng)用程序的詳細(xì)過程
    發(fā)表于 03-28 09:48 ?20次下載

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

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

    go語(yǔ)言枚舉類型怎么用

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

    SystemVerilog枚舉類型的使用建議

    SystemVerilog枚舉類型雖然屬于一種“強(qiáng)類型”,但是枚舉類型還是提供了一些“不正經(jīng)”
    的頭像 發(fā)表于 09-01 14:20 ?1692次閱讀

    淺析SystemVerilog枚舉類型

    枚舉類型定義了一組具有名稱的值,在沒有指定值時(shí)默認(rèn)是int型數(shù)值。
    的頭像 發(fā)表于 10-13 09:44 ?1617次閱讀

    枚舉類型的簡(jiǎn)單擴(kuò)展學(xué)習(xí)

    定義枚舉類型的值只能是整型常量,正數(shù)、負(fù)數(shù)和零都可以,但不可以是浮點(diǎn)數(shù)
    的頭像 發(fā)表于 05-25 15:45 ?644次閱讀

    何在Vivado添加時(shí)序約束呢?

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

    Java枚舉的特點(diǎn)及用法

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

    java switch case值能為枚舉值嗎

    Java的switch語(yǔ)句可以接受枚舉類型的值作為參數(shù)。在Java,枚舉是一種特殊的數(shù)據(jù)類型
    的頭像 發(fā)表于 11-30 14:41 ?5336次閱讀

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

    枚舉有多大?c語(yǔ)言枚舉end的作用是什么? 枚舉在C語(yǔ)言中是一種常見的數(shù)據(jù)類型,用于定義一組相互關(guān)聯(lián)的常量或者變量。它通常用于表示一系列可能的取值,使得程序更加易讀和易維護(hù)。在C語(yǔ)言中
    的頭像 發(fā)表于 01-19 14:19 ?592次閱讀
    RM新时代网站-首页