模型定义

模型定义html head head body p GORM 通过将 Go 结构体 Go structs 映射到数据库表来简化数据库交互 了解如何在 GORM 中定义模型 是充分利用 GORM 全部功能的基础 p 模型是使用普通结构体定义的 这些结构体可以包含具有基本 Go 类型 指针或这些类型的别名 body html

大家好,我是讯享网,很高兴认识大家。这里提供最前沿的Ai技术和互联网信息。



 

GORM 通过将 Go 结构体(Go structs) 映射到数据库表来简化数据库交互。 了解如何在GORM中定义模型,是充分利用GORM全部功能的基础。

模型是使用普通结构体定义的。 这些结构体可以包含具有基本Go类型、指针或这些类型的别名,甚至是自定义类型(只需要实现 包中的Scanner和Valuer接口)。

考虑以下 模型的示例:

在此模型中:

  • 具体数字类型如 、和 直接使用。
  • 指向 和 类型的指针表示可空字段。
  • 来自 包的 和 用于具有更多控制的可空字段。
  • 和 是特殊字段,当记录被创建或更新时,GORM 会自动向内填充当前时间。
  • Non-exported fields (starting with a small letter) are not mapped

除了 GORM 中模型声明的基本特性外,强调下通过 serializer 标签支持序列化也很重要。 此功能增强了数据存储和检索的灵活性,特别是对于需要自定义序列化逻辑的字段。详细说明请参见 Serializer。

  1. 主键:GORM 使用一个名为 的字段作为每个模型的默认主键。
  2. 表名:默认情况下,GORM 将结构体名称转换为 并为表名加上复数形式。 For instance, a struct becomes in the database, and a becomes .
  3. 列名:GORM 自动将结构体字段名称转换为 作为数据库中的列名。
  4. 时间戳字段:GORM使用字段 和 来自动跟踪记录的创建和更新时间。

遵循这些约定可以大大减少您需要编写的配置或代码量。 但是,GORM也具有灵活性,允许您根据自己的需求自定义这些设置。 您可以在GORM的约定文档中了解更多关于自定义这些约定的信息。

GORM提供了一个预定义的结构体,名为,其中包含常用字段:

  • 将其嵌入在您的结构体中: 您可以直接在您的结构体中嵌入 ,以便自动包含这些字段。 这对于在不同模型之间保持一致性并利用GORM内置的约定非常有用,请参考嵌入结构。
  • 包含的字段
    • :每个记录的唯一标识符(主键)。
    • :在创建记录时自动设置为当前时间。
    • :每当记录更新时,自动更新为当前时间。
    • :用于软删除(将记录标记为已删除,而实际上并未从数据库中删除)。

可导出的字段在使用 GORM 进行 CRUD 时拥有全部的权限,此外,GORM 允许您用标签控制字段级别的权限。这样您就可以让一个字段的权限是只读、只写、只创建、只更新或者被忽略

GORM 约定使用 、 追踪创建/更新时间。如果您定义了这种字段,GORM 在创建、更新时会自动填充 当前时间

要使用不同名称的字段,您可以配置 、 标签。

如果您想要保存 UNIX(毫/纳)秒时间戳,而不是 time,您只需简单地将 修改为 即可

对于匿名字段,GORM 会将其字段包含在父结构体中,例如:

对于正常的结构体字段,你也可以通过标签 将其嵌入,例如:

并且,您可以使用标签 来为 db 中的字段名添加前缀,例如:

Tags are optional to use when declaring models, GORM supports the following tags: Tags are case insensitive, however is preferred. If multiple tags are used they should be separated by a semicolon (). Characters that have special meaning to the parser can be escaped with a backslash () allowing them to be used as parameter values.

标签名 说明 column 指定 db 列名 type 列数据类型,推荐使用兼容性好的通用类型,例如:所有数据库都支持 bool、int、uint、float、string、time、bytes 并且可以和其他标签一起使用,例如:、, … 像 这样指定数据库数据类型也是支持的。在使用指定数据库数据类型时,它需要是完整的数据库数据类型,如: serializer 指定将数据序列化或反序列化到数据库中的序列化器, 例如: size 定义列数据类型的大小或长度,例如 primaryKey 将列定义为主键 unique 将列定义为唯一键 default 定义列的默认值 precision 指定列的精度 scale 指定列大小 not null 指定列为 NOT NULL autoIncrement 指定列为自动增长 autoIncrementIncrement 自动步长,控制连续记录之间的间隔 embedded 嵌套字段 embeddedPrefix 嵌入字段的列名前缀 autoCreateTime 创建时追踪当前时间,对于 字段,它会追踪时间戳秒数,您可以使用 / 来追踪纳秒、毫秒时间戳,例如: autoUpdateTime 创建/更新时追踪当前时间,对于 字段,它会追踪时间戳秒数,您可以使用 / 来追踪纳秒、毫秒时间戳,例如: index 根据参数创建索引,多个字段使用相同的名称则创建复合索引,查看 索引 获取详情 uniqueIndex 与 相同,但创建的是唯一索引 check 创建检查约束,例如 ,查看 约束 获取详情 <- 设置字段写入的权限, 只创建、 只更新、 无写入权限、 创建和更新权限 -> 设置字段读的权限, 无读权限 - 忽略该字段, 表示无读写, 表示无迁移权限, 表示无读写迁移权限 comment 迁移时为字段添加注释

GORM 允许通过标签为关联配置外键、约束、many2many 表,详情请参考 关联部分

小讯
上一篇 2026-04-05 14:49
下一篇 2026-04-05 14:47

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/221936.html