首页/文章/Golang

Golang 之 gorm 标签介绍

2024-11-14
282410 分钟
...

结构体标签

标签定义

Tag是结构体在编译阶段关联到成员的元信息字符串,在运行的时候通过反射的机制读取出来。

结构体标签由一个或多个键值对组成。键与值使用冒号分隔,值用双引号括起来。键值对之间使用一个空格分隔的,如下

key会指定反射的解析方式,ps: json(JSON标签) orm(Beego标签)、gorm(GORM标签)、bson(MongoDB标签)、form(表单标签)、binding(表单验证标签) search(搜索标签)

包介绍 encoding/json

Gorm 标签

JSON 数组可以用于编码Go语言的数组slice;由于JSON对象是一个字符串到值的映射,写成一系列的name:value对形式,因此JSON的对象类型可以用于编码Go语言的map结构体

将Go语言中结构体slice转为JSON的过程叫编组(marshaling),编组通过json.Marshal函数完成。在编码时,默认使用Go语言结构体的成员名字作为JSON的对象(通过reflect反射技术)。只有导出的结构体成员才会被编码。

json标签示例

标签选项使用说明
-字段不进行序列化 例:json:"-"
omitempy类型零值或空值,序列化时忽略该字段 例:json:",omitempy" 字段名省略的话用结构体字段名
type重新指定字段类型 例:json:"age,int"

gorm标签

模型是标准的 struct,由基本数据类型以及实现了 Scanner 和 Valuer 接口的自定义类型及其指针或别名组成。

gorm.Model 结构体,如图:

gorm为键名的标签遵循GORM的解析规则,GORM支持如下tag,tag名大小写不敏感

标签项介绍
column指定 db 列名
type列数据类型,推荐使用兼容性好的通用类型,例如:所有数据库都支持 bool、int、uint、float、string、time、bytes 并且可以和其他标签一起使用,例如:not nullsizeautoIncrement… 像 varbinary(8) 这样指定数据库数据类型也是支持的。在使用指定数据库数据类型时,它需要是完整的数据库数据类型,如:MEDIUMINT UNSIGNED not NULL AUTO_INCREMENT
size指定列大小,ps:size:1024
primaryKey主键
unique指定为唯一
default默认值
precision精度
scale列大小
not nullNOT NULL
autoIncrement自动增长,不可与primaryKeytype同时使用否则不生效
autoIncrementIncrement自动步长,控制连续记录之间的间隔
embedded嵌套字段
embeddedPrefix嵌套字段前缀
autoCreateTime创建时追踪当前时间,对于 int 字段,它会追踪秒级时间戳,可以使用 nano/milli 来追踪纳秒、毫秒时间戳,例如:autoCreateTime:milli
autoUpdateTime创建/更新时追踪当前时间,对于 int 字段,它会追踪秒级时间戳,可以使用 nano/milli 来追踪纳秒、毫秒时间戳,例如:autoUpdateTime:milli
index根据参数创建索引,多个字段使用相同的名称则创建复合索引,查看 索引 获取详情
uniqueIndex与 index 相同,但创建的是唯一索引
check创建检查约束,例如 check:age > 13,查看 约束 获取详情
comment迁移时为字段添加注释
-忽略该字段,- 无读写权限

注:GORM模型 官方文档

form标签

Gin中提供了模型绑定,将表单数据和模型进行绑定,方便参数校验和使用。

通过 form:"email" 对表单email数据进行绑定。然后通过Bind()、ShouldBind()等方法获取参数值。 ps:

validate

Gin对于数据的校验使用的是 validator.v10 ,该包提供多种数据校验方法,通过validate:""标签来进行数据校验。

必需校验

标签项介绍示例
required必须的validate:"required"
omitempty如果字段未设置,则忽略它validate:"omitempty"

范围校验

范围验证: 切片、数组和map、字符串,验证其长度;数值,验证大小范围

标签项介绍示例
len参数值等于给定值validate:"len=1"等于1
ne不等于validate:"ne=1"
max最大值validate:"max=1"
min最小值validate:"min=1"
lte小于等于validate:"lte=1"
gte大于等于validate:"gte=1"
lt小于validate:"lt=1"
gt大于validate:"gt=1"
oneof参数值只能是枚举值中的一个,值必须是数值或字符串,以空格分隔,如果字符串中有空格,将字符串用单引号包围validate:"oneof=1 2 3 4"

注:文档地址

字符串校验

标签项介绍示例
contains包含validate:"contains=1"
excludes不包含validate:"excludes=1"
startswith以xx开始validate:"startswith=1"
endswith以xx结束validate:"endswith=1"

注:文档地址

字段校验

标签项介绍
eqcsfield跨不同结构体字段相等,比如struct1 field1 是否等于struct2 field2
necsfield跨不同结构体字段不相等
eqfield同一结构体字段相等验证,例如:输入两次密码
nefield同一结构体字段不相等验证
gtefield大于等于同一结构体字段
ltefield小于等于同一结构体字段

其他校验

标签项介绍示例
ip合法IP地址校验validate:"ip"
email合法邮箱校验validate:"email"
url合法的URLvalidate:"url"
uri合法的URIvalidate:"uri"
uuiduuid校验validate:"uuid"
datetime合法时间格式值校验validate:"datetime"
jsonJSON数据验证validate:"json"
numeric数值验证validate:"numeric"
number整数验证validate:"number"
alphauui字母字符串验证validate:"alpha"
alphanum字母数字字符串验证validate:"alphanum"
asciiAscii 字符验证validate:"ascii"

注:文档地址

如果您觉得这篇文章有帮助,请点个赞吧~

分享文章

相关文章

更多文章 →
Golang2026-04-10
golang文档
1\. Go 是什么 Go 是一种 强类型、垃圾回收、原生支持并发 的编程语言。代码由 package 组成;用 module 管理依赖;可执行程序通常从 package main 的 main() 函数开始运行。Go 官方一直强调兼容性,Go 1.26 也继续保持 Go 1 的兼容承诺。 最小可运行程序: 这里你已经看到了 Go 最核心的 3 个语法点: package 声明包、import 导入包、func 声明函数。main 包里...
学习
Golang2025-07-11
Go语言strconv包:字符串和数值类型的相互转换
在实际开发中我们往往需要对一些常用的数据类型进行转换,如 string、int、int64、float 等数据类型之间的转换,Go语言中的 strconv 包为我们提供了字符串和基本数据类型之间的转换功能。 strconv 包中常用的函数包括 Atoi()、Itia()、parse 系列函数、format 系列函数、append 系列函数等,下面就来分别介绍一下。 string 与 int 类型之间的转换 字符串和整型之间的转换是我们平...
学习
Golang2025-06-11
深入理解 Go 中的 new() 和 make() 函数
在 Go 语言中, 和 是两个常用的函数,用于创建和初始化不同类型的变量。本文将深入探讨 和 的区别、使用场景以及底层实现原理。 引言 Go 中的 和 函数是用于创建和初始化变量的重要工具。 用于创建指定类型的零值变量,并返回该变量的指针。 用于创建并初始化引用类型的变量,如切片、映射和通道。 函数 函数的基本语法及用法。 创建的变量是指定类型的零值,并返回该变量的指针。 适用于创建引用类型以外的其他类型变量。 函数 函数的基本语法及用...
学习
Golang2025-06-10
Ubuntu 升级 golang 版本完美步骤
一、删除旧的版本(可选) 二、下载最新版本 三、设置环境变量 1、打开profile: 2、添加以下变量: 3、是环境立即生效 4、将环境立即生效载入脚本 先打开文件这个文件: 加入这个命令: 四、查看 go 环境变量 五、GO111MOUDLE和更改GOPROXY 六、查看 go 版本 ⚙️
学习
Golang2025-06-05
Go 自动升级依赖版本
🚀 Go 自动升级依赖版本 在 Go 语言项目中,依赖管理使用 Go Modules ( 和 )。如果想要 自动升级依赖 ,可以使用以下方法。 1\. 方式 1:升级所有依赖 🔹 作用: :升级所有 Go 依赖到最新的 次要版本(minor)或补丁版本(patch) 。 :升级所有项目内的依赖。 2\. 方式 2:升级指定依赖 🔹 作用: 只升级 这个依赖到最新版本。 如果你需要升级到 最新的主要版本(major version)...
学习
Golang2025-06-02
GO项目的打包和部署
在 Go 语言中,打包和部署应用非常简单,因为 Go 编译生成的可执行文件不依赖外部环境。以下是 打包发布和部署 Go 应用 的几种常见方式,以及一些最佳实践。 1\. 基本的打包和构建 构建可执行文件 你可以通过 命令将你的应用打包成一个可执行文件: 说明: 指定输出的可执行文件名(如果省略,输出名默认为当前目录名)。 如果没有错误,当前目录会生成一个可执行文件 (Windows 系统下是 )。 运行可执行文件: 2\. 打包不同平台...
学习

评论

请登录后发表评论

去登录
加载评论中...

目录