色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    文章

    3649

    瀏覽量

    94345
  • 模型
    +關注

    關注

    1

    文章

    3415

    瀏覽量

    49476
  • 枚舉
    +關注

    關注

    0

    文章

    16

    瀏覽量

    4648

原文標題: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 ?5296次閱讀

    SystemVerilog枚舉類型的使用建議

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

    淺析SystemVerilog枚舉類型

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

    枚舉類型的簡單擴展學習

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

    何在Vivado添加時序約束呢?

    今天介紹一下,如何在Vivado添加時序約束,Vivado添加約束的方法有3種:xdc文件、時序約束向導(Constraints Wizard)、時序約束編輯器(Edit Timin
    的頭像 發表于 06-26 15:21 ?4554次閱讀
    如<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 ?1666次閱讀

    java switch case值能為枚舉值嗎

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

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

    枚舉有多大?c語言枚舉end的作用是什么? 枚舉在C語言中是一種常見的數據類型,用于定義一組相互關聯的常量或者變量。它通常用于表示一系列可能的取值,使得程序更加易讀和易維護。在C語言中
    的頭像 發表于 01-19 14:19 ?731次閱讀
    主站蜘蛛池模板: 欧美亚洲国产免费高清视频 | 青柠电影高清在线观看 | 妺妺窝人体色WWW偷窥女厕 | 软糯白嫩双性受h | 成人中文字幕在线 | 成年人国产视频 | 亚洲三级视频在线观看 | 成人在线观看国产 | 韩剧甜性涩爱 | 欧美乱妇狂野欧美在线视频 | 亚洲 日韩 自拍 视频一区 | 99re久久热免费视频 | 国产精品俺来也在线观看 | 亚洲国产综合人成综合网站00 | 欧洲电影巜肉欲丛林 | AV福利无码亚洲网站麻豆 | 免费网站在线观看国产v片 免费完整版观看 | 成片在线看一区二区草莓 | 青青草在线 视频 | 亚洲H成年动漫在线观看不卡 | 国产美女一区二区 | 成人免费一区二区无码视频 | 一个人看的HD免费高清视频 | 久久性综合亚洲精品电影网 | 亚洲日韩KKK444KKK聚色 | 青青草伊人 | 成年人国产视频 | 日本精油按摩 | 国产盗摄TP摄像头偷窥 | 国产色精品久久人妻99蜜桃麻豆 | 情浓野战台湾三级 | 日本内射精品一区二区视频 | 亚洲欧美综合乱码精品成人网 | 欧美性喷潮xxxx | 国产 亚洲 中文字幕 久久网 | 国产AV亚洲国产AV麻豆 | 99视频这里只有精品国产 | 亚洲三级在线观看 | 萝莉御姐被吸奶 | 国产色婷亚洲99精品AV | 性夜a爽黄爽 |