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

golang?gorm模型結(jié)構(gòu)體的定義示例

 更新時(shí)間:2022年04月15日 16:23:12   作者:Jeff的技術(shù)棧  
這篇文章主要為大家介紹了golang?gorm模型結(jié)構(gòu)體的定義示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪

1. 模型

1.1. 模型定義

type User struct {
    gorm.Model
    Birthday     time.Time
    Age          int
    Name         string  `gorm:"size:255"`       // string默認(rèn)長(zhǎng)度為255, 使用這種tag重設(shè)。
    Num          int     `gorm:"AUTO_INCREMENT"` // 自增
    CreditCard        CreditCard      // One-To-One (擁有一個(gè) - CreditCard表的UserID作外鍵)
    Emails            []Email         // One-To-Many (擁有多個(gè) - Email表的UserID作外鍵
    BillingAddress    Address         // One-To-One (屬于 - 本表的BillingAddressID作外鍵)
    BillingAddressID  sql.NullInt64
    ShippingAddress   Address         // One-To-One (屬于 - 本表的ShippingAddressID作外鍵)
    ShippingAddressID int
    IgnoreMe          int `gorm:"-"`   // 忽略這個(gè)字段
    Languages         []Language `gorm:"many2many:user_languages;"` // Many-To-Many , 'user_languages'是連接表
}
type Email struct {
    ID      int
    UserID  int     `gorm:"index"` // 外鍵 (屬于), tag `index`是為該列創(chuàng)建索引
    Email   string  `gorm:"type:varchar(100);unique_index"` // `type`設(shè)置sql類型, `unique_index` 為該列設(shè)置唯一索引
    Subscribed bool
}
type Address struct {
    ID       int
    Address1 string         `gorm:"not null;unique"` // 設(shè)置字段為非空并唯一
    Address2 string         `gorm:"type:varchar(100);unique"`
    Post     sql.NullString `gorm:"not null"`
}
type Language struct {
    ID   int
    Name string `gorm:"index:idx_name_code"` // 創(chuàng)建索引并命名,如果找到其他相同名稱的索引則創(chuàng)建組合索引
    Code string `gorm:"index:idx_name_code"` // `unique_index` also works
}
type CreditCard struct {
    gorm.Model
    UserID  uint
    Number  string
}

2. 約定

2.1. gorm.Model 結(jié)構(gòu)體

基本模型定義gorm.Model,包括字段ID,CreatedAtUpdatedAt,DeletedAt,你可以將它嵌入你的模型,或者只寫你想要的字段

// 基本模型的定義
type Model struct {
  ID        uint `gorm:"primary_key"`
  CreatedAt time.Time
  UpdatedAt time.Time
  DeletedAt *time.Time
}
// 添加字段 `ID`, `CreatedAt`, `UpdatedAt`, `DeletedAt`
type User struct {
  gorm.Model
  Name string
}
// 只需要字段 `ID`, `CreatedAt`
type User struct {
  ID        uint
  CreatedAt time.Time
  Name      string
}

2.2. 表名是結(jié)構(gòu)體名稱的復(fù)數(shù)形式

type User struct {} // 默認(rèn)表名是`users`
// 設(shè)置User的表名為`profiles`
func (User) TableName() string {
  return "profiles"
}
func (u User) TableName() string {
    if u.Role == "admin" {
        return "admin_users"
    } else {
        return "users"
    }
}
// 全局禁用表名復(fù)數(shù)
db.SingularTable(true) // 如果設(shè)置為true,`User`的默認(rèn)表名為`user`,使用`TableName`設(shè)置的表名不受影響

2.3. 更改默認(rèn)表名

您可以通過(guò)定義DefaultTableNameHandler對(duì)默認(rèn)表名應(yīng)用任何規(guī)則。

gorm.DefaultTableNameHandler = func (db *gorm.DB, defaultTableName string) string  {
    return "prefix_" + defaultTableName;
}

2.4. 列名是字段名的蛇形小寫

type User struct {
  ID uint             // 列名為 `id`
  Name string         // 列名為 `name`
  Birthday time.Time  // 列名為 `birthday`
  CreatedAt time.Time // 列名為 `created_at`
}
// 重設(shè)列名
type Animal struct {
    AnimalId    int64     `gorm:"column:beast_id"`         // 設(shè)置列名為`beast_id`
    Birthday    time.Time `gorm:"column:day_of_the_beast"` // 設(shè)置列名為`day_of_the_beast`
    Age         int64     `gorm:"column:age_of_the_beast"` // 設(shè)置列名為`age_of_the_beast`
}

2.5. 字段ID為主鍵

type User struct {
  ID   uint  // 字段`ID`為默認(rèn)主鍵
  Name string
}
// 使用tag`primary_key`用來(lái)設(shè)置主鍵
type Animal struct {
  AnimalId int64 `gorm:"primary_key"` // 設(shè)置AnimalId為主鍵
  Name     string
  Age      int64
}

2.6. 字段CreatedAt用于存儲(chǔ)記錄的創(chuàng)建時(shí)間

創(chuàng)建具有CreatedAt字段的記錄將被設(shè)置為當(dāng)前時(shí)間

db.Create(&user) // 將會(huì)設(shè)置`CreatedAt`為當(dāng)前時(shí)間
// 要更改它的值, 你需要使用`Update`
db.Model(&user).Update("CreatedAt", time.Now())

2.7. 字段UpdatedAt用于存儲(chǔ)記錄的修改時(shí)間

保存具有UpdatedAt字段的記錄將被設(shè)置為當(dāng)前時(shí)間

db.Save(&user) // 將會(huì)設(shè)置`UpdatedAt`為當(dāng)前時(shí)間
db.Model(&user).Update("name", "jinzhu") // 將會(huì)設(shè)置`UpdatedAt`為當(dāng)前時(shí)間

2.8. 字段DeletedAt用于存儲(chǔ)記錄的刪除時(shí)間,如果字段存在

刪除具有DeletedAt字段的記錄,它不會(huì)沖數(shù)據(jù)庫(kù)中刪除,但只將字段DeletedAt設(shè)置為當(dāng)前時(shí)間,并在查詢時(shí)無(wú)法找到記錄,請(qǐng)參閱[軟刪除]

以上就是golang gorm模型結(jié)構(gòu)體的定義示例的詳細(xì)內(nèi)容,更多關(guān)于golang gorm模型結(jié)構(gòu)體的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • GO日志打印如何添加goroutineid

    GO日志打印如何添加goroutineid

    今天想給日志添加一個(gè)前綴,以區(qū)分不同goroutine的日志,方便做并發(fā)問(wèn)題的排查,做日志跟蹤,下面給大家分享GO日志打印如何添加goroutineid,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • go 微服務(wù)框架kratos使用中間件的方法

    go 微服務(wù)框架kratos使用中間件的方法

    在go語(yǔ)言中,中間件是一種用于處理http請(qǐng)求的開發(fā)模式,允許開發(fā)人員在請(qǐng)求到達(dá)處理程序之前或之后執(zhí)行特定的操作,如日志記錄、身份驗(yàn)證、錯(cuò)誤處理等,這篇文章主要介紹了go 微服務(wù)框架kratos使用中間件的方法,需要的朋友可以參考下
    2024-05-05
  • Go?代碼塊作用域變量遮蔽問(wèn)題解析

    Go?代碼塊作用域變量遮蔽問(wèn)題解析

    這篇文章主要為大家介紹了Go?代碼塊作用域變量遮蔽問(wèn)題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • golang?slice中常見性能優(yōu)化手段總結(jié)

    golang?slice中常見性能優(yōu)化手段總結(jié)

    這篇文章主要為大家詳細(xì)一些Golang開發(fā)中常用的slice關(guān)聯(lián)的性能優(yōu)化手段,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-10-10
  • Golang的鎖機(jī)制使用及說(shuō)明

    Golang的鎖機(jī)制使用及說(shuō)明

    這篇文章主要介紹了Golang的鎖機(jī)制使用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 深入理解go?reflect反射慢的原因

    深入理解go?reflect反射慢的原因

    我們選擇?go?語(yǔ)言的一個(gè)重要原因是,它有非常高的性能。但是它反射的性能卻一直為人所詬病,本篇文章就來(lái)看看?go?反射的性能問(wèn)題,感興趣的可以了解一下
    2023-01-01
  • golang實(shí)現(xiàn)讀取excel數(shù)據(jù)并導(dǎo)入數(shù)據(jù)庫(kù)

    golang實(shí)現(xiàn)讀取excel數(shù)據(jù)并導(dǎo)入數(shù)據(jù)庫(kù)

    Go 語(yǔ)言是一門適合用于編寫高效且并發(fā)的 Web 應(yīng)用程序的編程語(yǔ)言,同時(shí)也可以使用它進(jìn)行數(shù)據(jù)處理和分析,本文主要介紹了如何通過(guò)go語(yǔ)言實(shí)現(xiàn)讀取excel數(shù)據(jù)并導(dǎo)入數(shù)據(jù)庫(kù),感興趣的小伙伴可以了解下
    2025-04-04
  • Golang對(duì)struct字段重新排序優(yōu)化數(shù)據(jù)結(jié)構(gòu)性能實(shí)踐

    Golang對(duì)struct字段重新排序優(yōu)化數(shù)據(jù)結(jié)構(gòu)性能實(shí)踐

    這篇文章主要為大家介紹了Golang對(duì)struct字段重新排序優(yōu)化數(shù)據(jù)結(jié)構(gòu)性能實(shí)踐,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • golang操作elasticsearch的實(shí)現(xiàn)

    golang操作elasticsearch的實(shí)現(xiàn)

    這篇文章主要介紹了golang操作elasticsearch,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Go編寫定時(shí)器與定時(shí)任務(wù)詳解(附第三方庫(kù)gocron用法)

    Go編寫定時(shí)器與定時(shí)任務(wù)詳解(附第三方庫(kù)gocron用法)

    當(dāng)需要每天執(zhí)行定時(shí)任務(wù)的時(shí)候就需要定時(shí)器來(lái)處理了,周期任務(wù),倒計(jì)時(shí)任務(wù),定點(diǎn)任務(wù)等,下面這篇文章主要給大家介紹了關(guān)于Go編寫定時(shí)器與定時(shí)任務(wù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07

最新評(píng)論

聂拉木县| 盐城市| 乐陵市| 定州市| 莲花县| 阿合奇县| 九龙城区| 东丰县| 芦溪县| 扬中市| 永城市| 郧西县| 嘉荫县| 阜宁县| 平顺县| 哈密市| 西峡县| 孝昌县| 托里县| 会宁县| 金坛市| 昌图县| 新密市| 美姑县| 芮城县| 晋宁县| 井研县| 营口市| 连州市| 武义县| 白银市| 介休市| 龙川县| 天柱县| 平顺县| 永兴县| 昭苏县| 浑源县| 页游| 香港| 蛟河市|