欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

1. 模型

1.1. 模型定義

type User struct {
    gorm.Model
    Birthday     time.Time
    Age          int
    Name         string  `gorm:"size:255"`       // string默認長度為255, 使用這種tag重設(shè)。
    Num          int     `gorm:"AUTO_INCREMENT"` // 自增
    CreditCard        CreditCard      // One-To-One (擁有一個 - CreditCard表的UserID作外鍵)
    Emails            []Email         // One-To-Many (擁有多個 - Email表的UserID作外鍵
    BillingAddress    Address         // One-To-One (屬于 - 本表的BillingAddressID作外鍵)
    BillingAddressID  sql.NullInt64
    ShippingAddress   Address         // One-To-One (屬于 - 本表的ShippingAddressID作外鍵)
    ShippingAddressID int
    IgnoreMe          int `gorm:"-"`   // 忽略這個字段
    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,CreatedAt,UpdatedAtDeletedAt,你可以將它嵌入你的模型,或者只寫你想要的字段

// 基本模型的定義
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)體名稱的復數(shù)形式

type User struct {} // 默認表名是`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"
    }
}
// 全局禁用表名復數(shù)
db.SingularTable(true) // 如果設(shè)置為true,`User`的默認表名為`user`,使用`TableName`設(shè)置的表名不受影響

2.3. 更改默認表名

您可以通過定義DefaultTableNameHandler對默認表名應(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`為默認主鍵
  Name string
}
// 使用tag`primary_key`用來設(shè)置主鍵
type Animal struct {
  AnimalId int64 `gorm:"primary_key"` // 設(shè)置AnimalId為主鍵
  Name     string
  Age      int64
}

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

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

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

2.7. 字段UpdatedAt用于存儲記錄的修改時間

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

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

2.8. 字段DeletedAt用于存儲記錄的刪除時間,如果字段存在

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

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

相關(guān)文章

  • Go 語言中g(shù)in使用gzip壓縮遇到的問題

    Go 語言中g(shù)in使用gzip壓縮遇到的問題

    這篇文章主要介紹了Go 語言中g(shù)in使用gzip壓縮遇到的問題,需要的朋友可以參考下
    2017-09-09
  • 深入理解Go語言中接口的使用

    深入理解Go語言中接口的使用

    在現(xiàn)代編程語言中,接口是不可或缺的一個重要特性,這篇文章將為大家詳細介紹Go語言中的接口,從而能夠更好得使用Go語言,需要的可以參考一下
    2023-06-06
  • 如何利用golang運用mysql數(shù)據(jù)庫

    如何利用golang運用mysql數(shù)據(jù)庫

    這篇文章主要介紹了如何利用golang運用mysql數(shù)據(jù)庫,文章對依賴包、db對象注入ApiRouter等內(nèi)容,需要的小伙伴可以參考一下
    2022-03-03
  • GO利用channel協(xié)調(diào)協(xié)程的實現(xiàn)

    GO利用channel協(xié)調(diào)協(xié)程的實現(xiàn)

    本文主要介紹了GO利用channel協(xié)調(diào)協(xié)程的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • Go語言依賴管理三要素示例解析

    Go語言依賴管理三要素示例解析

    這篇文章主要介紹了Go語言依賴管理三要素及示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • go-cqhttp智能聊天功能的實現(xiàn)

    go-cqhttp智能聊天功能的實現(xiàn)

    這篇文章主要介紹了go-cqhttp智能聊天功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • Goland配置leetcode的實現(xiàn)示例

    Goland配置leetcode的實現(xiàn)示例

    本文主要介紹了Goland配置leetcode的實現(xiàn)示例,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-06-06
  • Go語言規(guī)范context?類型的key用法示例解析

    Go語言規(guī)范context?類型的key用法示例解析

    這篇文章主要為大家介紹了Go語言規(guī)范context?類型的key用法示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • PHP結(jié)構(gòu)型模式之組合模式

    PHP結(jié)構(gòu)型模式之組合模式

    這篇文章主要介紹了PHP組合模式Composite Pattern優(yōu)點與實現(xiàn),組合模式是一種結(jié)構(gòu)型模式,它允許你將對象組合成樹形結(jié)構(gòu)來表示“部分-整體”的層次關(guān)系。組合能讓客戶端以一致的方式處理個別對象和對象組合
    2023-04-04
  • Golang切片Slice功能操作詳情

    Golang切片Slice功能操作詳情

    這篇文章主要介紹了Golang切片功能操作詳情,切片是一個擁有相同類型元素的可變長度的序列。它是基于數(shù)組類型做的一層封,切片是一個引用類型,它的內(nèi)部結(jié)構(gòu)包含地址、長度和容量
    2022-09-09

最新評論