iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >golang gorm模型结构体的定义示例
  • 935
分享到

golang gorm模型结构体的定义示例

2024-04-02 19:04:59 935人浏览 安东尼
摘要

目录1. 模型1.1. 模型定义2. 约定2.1. gORM.Model 结构体2.2. 表名是结构体名称的复数形式2.3. 更改默认表名2.4. 列名是字段名的蛇形小写2.5. 字

1. 模型

1.1. 模型定义

type User struct {
    Gorm.Model
    Birthday     time.Time
    Age          int
    Name         string  `gorm:"size:255"`       // string默认长度为255, 使用这种tag重设。
    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`是为该列创建索引
    Email   string  `gorm:"type:varchar(100);unique_index"` // `type`设置sql类型, `unique_index` 为该列设置唯一索引
    Subscribed bool
}
type Address struct {
    ID       int
    Address1 string         `gorm:"not null;unique"` // 设置字段为非空并唯一
    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"` // 创建索引并命名,如果找到其他相同名称的索引则创建组合索引
    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 结构体

基本模型定义gorm.Model,包括字段IDCreatedAtUpdatedAtDeletedAt,你可以将它嵌入你的模型,或者只写你想要的字段

// 基本模型的定义
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. 表名是结构体名称的复数形式

type User struct {} // 默认表名是`users`
// 设置User的表名为`profiles`
func (User) TableName() string {
  return "profiles"
}
func (u User) TableName() string {
    if u.Role == "admin" {
        return "admin_users"
    } else {
        return "users"
    }
}
// 全局禁用表名复数
db.SingularTable(true) // 如果设置为true,`User`的默认表名为`user`,使用`TableName`设置的表名不受影响

2.3. 更改默认表名

您可以通过定义DefaultTableNameHandler对默认表名应用任何规则。

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`
}
// 重设列名
type Animal struct {
    AnimalId    int64     `gorm:"column:beast_id"`         // 设置列名为`beast_id`
    Birthday    time.Time `gorm:"column:day_of_the_beast"` // 设置列名为`day_of_the_beast`
    Age         int64     `gorm:"column:age_of_the_beast"` // 设置列名为`age_of_the_beast`
}

2.5. 字段ID为主键

type User struct {
  ID   uint  // 字段`ID`为默认主键
  Name string
}
// 使用tag`primary_key`用来设置主键
type Animal struct {
  AnimalId int64 `gorm:"primary_key"` // 设置AnimalId为主键
  Name     string
  Age      int64
}

2.6. 字段CreatedAt用于存储记录的创建时间

创建具有CreatedAt字段的记录将被设置为当前时间

db.Create(&user) // 将会设置`CreatedAt`为当前时间
// 要更改它的值, 你需要使用`Update`
db.Model(&user).Update("CreatedAt", time.Now())

2.7. 字段UpdatedAt用于存储记录的修改时间

保存具有UpdatedAt字段的记录将被设置为当前时间

db.Save(&user) // 将会设置`UpdatedAt`为当前时间
db.Model(&user).Update("name", "jinzhu") // 将会设置`UpdatedAt`为当前时间

2.8. 字段DeletedAt用于存储记录的删除时间,如果字段存在

删除具有DeletedAt字段的记录,它不会冲数据库中删除,但只将字段DeletedAt设置为当前时间,并在查询时无法找到记录,请参阅[软删除]

以上就是golang gorm模型结构体的定义示例的详细内容,更多关于golang gorm模型结构体的资料请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: golang gorm模型结构体的定义示例

本文链接: https://www.lsjlt.com/news/146150.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • golang gorm模型结构体的定义示例
    目录1. 模型1.1. 模型定义2. 约定2.1. gorm.Model 结构体2.2. 表名是结构体名称的复数形式2.3. 更改默认表名2.4. 列名是字段名的蛇形小写2.5. 字...
    99+
    2024-04-02
  • GEN 自动生成 GORM 模型结构体文件及使用示例
    GEN 自动生成 GORM 模型结构体文件及使用示例 背景 GEN 是一个基于 GORM 的安全 ORM 框架, 由字节跳动无恒实验室与 GORM 作者联合研发,主要功能说白了就是帮助生成数据表对应的...
    99+
    2023-09-06
    golang gorm gen mysql
  • Golang实现Json转结构体的示例详解
    解决实际需求,案例分享。 1.请求Zabbix API,通过itemid获取到AppName(应用集名称) package main import (  "encoding/jso...
    99+
    2023-02-19
    Golang Json转结构体 Golang Json 结构体
  • c语言如何自定义结构体类型
    在C语言中,可以使用`typedef`关键字来自定义结构体类型。`typedef`关键字用于为已存在的类型定义一个新的名称。以下是定...
    99+
    2023-09-04
    c语言
  • redis的Object结构体怎么定义
    这篇文章主要介绍“redis的Object结构体怎么定义”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“redis的Object结构体怎么定义”文章能帮助大家解决问题...
    99+
    2024-04-02
  • c++中的结构体怎么定义
    c++ 中的结构体是一种存储不同数据类型的数据类型,语法为 struct structure_name { // 数据成员声明 }。结构体成员可使用点运算符访问,例如 person.na...
    99+
    2024-05-11
    c++
  • Rust结构体的定义与实例化详细讲解
    结构体和我们在“元组类型”部分论过的元组类似,它们都包含多个相关的值。和元组一样,结构体的每一部分可以是不同类型。但不同于元组,结构体需要命名各部分数据以便能...
    99+
    2022-12-12
    Rust结构体定义 Rust结构体实例化
  • Rust结构体的定义与实例化代码分析
    这篇文章主要介绍“Rust结构体的定义与实例化代码分析”,在日常操作中,相信很多人在Rust结构体的定义与实例化代码分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Rust结构体的定义与实例化代码分析”的疑...
    99+
    2023-07-04
  • 如何在结构体中嵌套定义两层类型?
    知识点掌握了,还需要不断练习才能熟练运用。下面编程网给大家带来一个Golang开发实战,手把手教大家学习《如何在结构体中嵌套定义两层类型?》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新...
    99+
    2024-04-04
  • 在 GoLang 中对自定义结构体数组进行排序
    在GoLang中,对自定义结构体数组进行排序是一个常见的需求。通过对数组中的元素进行比较和交换,我们可以按照特定的规则对结构体数组进行排序。在排序过程中,我们可以使用不同的排序算法,例...
    99+
    2024-02-09
    冒泡排序
  • Python中结构型组合模式的示例分析
    这篇文章将为大家详细讲解有关Python中结构型组合模式的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、组合模式组合,将多个对象组合成为一个树状结构,来表示业务逻辑上的层次。组合模式使得用户对...
    99+
    2023-06-29
  • MySql整体结构的示例分析
    这篇文章主要介绍MySql整体结构的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! MySql 整体结构MySQL 由连接池、SQL 接口、解析器...
    99+
    2024-04-02
  • C++20中的结构化绑定类型示例详解
    目录C++20中新增了一个非常有用的特性结构化绑定概念结构化绑定类型数组Pair结构体实现一个可以被结构化绑定的类元组类型C++20中新增了一个非常有用的特性 结构化绑定(Struc...
    99+
    2023-05-17
    C++ 结构化绑定 C++ 20
  • JVM中体系结构的示例分析
    小编给大家分享一下JVM中体系结构的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是JVM?JVM(Java Virtual Machine)是一个抽...
    99+
    2023-06-20
  • js设计模式之结构型享元模式的示例分析
    小编给大家分享一下js设计模式之结构型享元模式的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!运用共享技术有效地支持大量...
    99+
    2024-04-02
  • MindSpore自定义模型损失函数的示例分析
    这篇文章将为大家详细讲解有关MindSpore自定义模型损失函数的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、技术背景损失函数是机器学习中直接决定训练结果好坏的一个模块,该函数用于定义计算出...
    99+
    2023-06-20
  • Angular结构型指令模块和样式的示例分析
    这篇文章主要介绍了Angular结构型指令模块和样式的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一,结构型指令*是一个语法糖,<a *ngIf="...
    99+
    2023-06-15
  • 如何掌握编译模板/自定义结构体绑定/http2/操作Cookie
    这篇文章主要讲解了“如何掌握编译模板/自定义结构体绑定/http2/操作Cookie”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何掌握编译模板/自定义结...
    99+
    2024-04-02
  • C语言自定义类型详解(结构体、枚举、联合体和位段)
    目录前言一、结构体1、结构体类型的声明2、结构体的自引用3、结构体变量的定义和初始化4、结构体内存对齐5、结构体传参二、位段1、位段的定义 2、位段的内存分配3、位段的应用...
    99+
    2024-04-02
  • Java结构型设计模式之享元模式示例详解
    目录享元模式概述目的应用场景优缺点主要角色享元模式结构内部状态和外部状态享元模式的基本使用创建抽象享元角色创建具体享元角色创建享元工厂客户端调用总结享元模式实现数据库连接池创建数据库...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作