Gin Tag 一览
date
Aug 5, 2023
slug
gin-tag-common-use-library
status
Published
tags
Gin
Go
summary
Gin Tag 使用指南
type
Post
Created Time
Oct 28, 2023 01:45 PM
Updated Time
Oct 28, 2023 01:45 PM
AI summary
Gin Tag提供了多种验证字段值的方法,包括验证业务标识代码、语言标签、比特币地址、信用卡号码、MongoDB的ObjectID、Cron表达式、日期时间、电子邮件地址、以太坊地址、国际标准书号、ISO国家代码、JSON格式、JWT、Luhn算法校验和、纬度、经度、社会安全号码、时区、通用唯一标识符、哈希值、语义化版本号、有序可排序的唯一标识符等。此外,还提供了比较和其他验证方法,如验证目录、文件、图像文件等。参考文档:https://github.com/go-playground/validator。
Status
Gin
是一个轻量级的 Web
框架,用于构建高性能的 Web
应用程序和 API
。它基于 Go
语言的 net/http
包进行开发,并提供了简洁的 API
和强大的路由功能,使得构建 Web
服务变得更加简单和高效。参数绑定
form
:表示该字段在表单中
在这个例子中,当使用
ShouldBind
或 ShouldBindQuery
方法将表单数据绑定到 User
结构体时,Name
字段将从表单中的 name
字段获取值,Password
字段将从表单中的 password
字段获取值。json
:表示该字段在请求体中
通过使用
json
标签,可以指定字段的 JSON
名称、忽略字段、设置字段的 omitempty
选项等。在这个例子中,当使用
json.Marshal
方法将 User
结构体转换为 JSON
字符串时,Name
字段将使用 name
作为键名,Password
字段将使用 password
作为键名。在这个例子中,
User
结构体具有三个字段:ID
、Name
和Password
。其中,ID
和Name
字段都使用了json
标签来指定其在JSON
序列化和反序列化中的行为。ID
字段使用了json:"id"
,这意味着在JSON
中,该字段将被命名为"id"。
Name
字段使用了json:"name"
,这意味着在JSON
中,该字段将被命名为"name"。同时,Name
字段使用omitempty
选项来指定在JSON
序列化时忽略空值字段,当字段的值为空(零值或空字符串)时,该字段将不会包含在生成的JSON
中。
Password
字段使用了json:"-"
,这意味着该字段将被忽略,不会出现在JSON
中。
uri
:表示该字段在 URI
中
在这个例子中,当使用
ShouldBindUri
方法将 URI
参数绑定到 User
结构体时,ID
字段将从 URI
中的 id
参数获取值,Name
字段将从 URI
中的 name
参数获取值。header
:表示该字段在 HTTP
请求头中
在这个例子中,当使用
GetHeader
方法获取 HTTP 请求头时,Token 字段将使用 Authorization 作为键名。xml
:表示该字段在 XML
中
在这个例子中,当使用
xml.Marshal
方法将 User
结构体转换为 XML
字符串时,Name
字段将使用 name
作为元素名称,Password
字段将使用 password
作为元素名称。参数验证
由于
Gin
框架集成了第三方库 go-playground/validator
来实现参数验证的功能,在使用 Gin
时,可以利用binding
标签结合go-playground/validator
的验证规则来对请求参数进行验证。在处理请求时,Gin
会自动调用验证器对象来验证参数,并根据验证结果返回相应的错误信息。这种集成方式使得 Gin
能够方便地使用go-playground/validator
中的验证方式进行参数验证,从而实现了灵活且强大的请求参数验证功能。字段
eqcsfield
: 用于验证字段的值是否等于另一个相对字段的值。
eqfield
: 用于验证字段的值是否等于另一个字段的值。
fieldcontains
: 用于验证字段的值是否包含指定的字符。
fieldexcludes
: 用于验证字段的值是否不包含指定的字符。
gtcsfield
: 用于验证字段的值是否大于另一个相对字段的值。
gtecsfield
: 用于验证字段的值是否大于或等于另一个相对字段的值。
gtefield
: 用于验证字段的值是否大于或等于另一个字段的值。
gtfield
: 用于验证字段的值是否大于另一个字段的值。
ltcsfield
: 用于验证字段的值是否小于另一个相对字段的值。
ltecsfield
: 用于验证字段的值是否小于或等于另一个相对字段的值。
ltefield
: 用于验证字段的值是否小于或等于另一个字段的值。
ltfield
: 用于验证字段的值是否小于另一个字段的值。
necsfield
: 用于验证字段的值是否不等于另一个相对字段的值。
nefield
: 用于验证字段的值是否不等于另一个字段的值。
网络
cidr
: 用于验证字段是否符合 CIDR(Classless Inter-Domain Routing)格式,也就是用于验证 IP 地址和子网掩码的组合。
cidrv4
: 用于验证 IPv4 地址和子网掩码组合的 CIDR 格式。
cidrv6
: 用于验证 IPv6 地址和子网掩码组合的 CIDR 格式。
datauri
: 用于验证 Data URL(数据 URL)的格式,该 URL 包含了数据的编码和元数据。
fqdn
: 用于验证全限定域名(FQDN)的格式,即完全指定的域名,包括主机名和域名后缀。
hostname
: 用于验证符合 RFC 952 标准的主机名。
hostname_port
: 用于验证主机名和端口号的组合。
hostname_rfc1123
: 用于验证符合 RFC 1123 标准的主机名。
ip
: 用于验证 Internet 协议(IP)地址的格式。
ip4_addr
: 用于验证 IPv4 地址的格式。
ip6_addr
: 用于验证 IPv6 地址的格式。
ip_addr
: 用于验证 IP 地址的格式。
ipv4
: 用于验证 IPv4 地址的格式。
ipv6
: 用于验证 IPv6 地址的格式。
mac
: 用于验证媒体访问控制(MAC)地址的格式。
tcp4_addr
: 用于验证 TCPv4 地址的格式。
tcp6_addr
: 用于验证 TCPv6 地址的格式。
tcp_addr
: 用于验证 TCP 地址的格式。
udp4_addr
: 用于验证 UDPv4 地址的格式。
udp6_addr
: 用于验证 UDPv6 地址的格式。
udp_addr
: 用于验证 UDP 地址的格式。
unix_addr
: 用于验证 Unix 域套接字终点地址的格式。
uri
: 用于验证统一资源标识符(URI)的格式。
url
: 用于验证统一资源定位符(URL)的格式。
http_url
: 用于验证 HTTP URL 的格式。
url_encoded
: 用于验证 URL 编码的格式。
urn_rfc2141
: 用于验证符合 RFC 2141 标准的 URN(Uniform Resource Name)字符串的格式。
字符串
alpha
: 用于验证字段的值是否只包含字母。
alphanum
: 用于验证字段的值是否只包含字母和数字。
alphanumunicode
: 用于验证字段的值是否只包含字母和数字(包括 Unicode 字符)。
alphaunicode
: 用于验证字段的值是否只包含字母(包括 Unicode 字符)。
ascii
: 用于验证字段的值是否只包含 ASCII 字符。
boolean
: 用于验证字段的值是否为布尔类型。
contains
: 用于验证字段的值是否包含指定的子字符串。
containsany
: 用于验证字段的值是否包含指定的任意字符。
containsrune
: 用于验证字段的值是否包含指定的 Unicode 字符。
endsnotwith
: 用于验证字段的值是否不以指定的后缀结尾。
endswith
: 用于验证字段的值是否以指定的后缀结尾。
excludes
: 用于验证字段的值是否不包含指定的子字符串。
excludesall
: 用于验证字段的值是否不包含指定的任何字符。
excludesrune
: 用于验证字段的值是否不包含指定的 Unicode 字符。
lowercase
: 用于验证字段的值是否只包含小写字母。
multibyte
: 用于验证字段的值是否包含多字节字符。
number
: 用于验证字段的值是否为数字类型。
numeric
: 用于验证字段的值是否只包含数字。
printascii
: 用于验证字段的值是否只包含可打印的 ASCII 字符。
startsnotwith
: 用于验证字段的值是否不以指定的前缀开头。
startswith
: 用于验证字段的值是否以指定的前缀开头。
uppercase
: 用于验证字段的值是否只包含大写字母。
格式化
base64
: 用于验证字段的值是否是 Base64 编码的字符串。
base64url
: 用于验证字段的值是否是 Base64URL 编码的字符串。
base64rawurl
: 用于验证字段的值是否是 Base64RawURL 编码的字符串。
bic
: 用于验证字段的值是否是业务标识代码(Business Identifier Code,ISO 9362)。
bcp47_language_tag
: 用于验证字段的值是否是语言标签(BCP 47)。
btc_addr
: 用于验证字段的值是否是比特币地址。
btc_addr_bech32
: 用于验证字段的值是否是比特币 Bech32 地址(segwit)。
credit_card
: 用于验证字段的值是否是信用卡号码。
mongodb
: 用于验证字段的值是否是 MongoDB 的 ObjectID。
cron
: 用于验证字段的值是否是 Cron 表达式。
spicedb
: 用于验证字段的值是否是 SpiceDb 的 ObjectID、权限或类型。
datetime
: 用于验证字段的值是否是日期时间。
e164
: 用于验证字段的值是否是 E.164 格式的电话号码。
email
: 用于验证字段的值是否是电子邮件地址。
eth_addr
: 用于验证字段的值是否是以太坊地址。
hexadecimal
: 用于验证字段的值是否是十六进制字符串。
hexcolor
: 用于验证字段的值是否是十六进制颜色字符串。
hsl
: 用于验证字段的值是否是 HSL 颜色字符串。
hsla
: 用于验证字段的值是否是 HSLA 颜色字符串。
html
: 用于验证字段的值是否包含 HTML 标签。
html_encoded
: 用于验证字段的值是否是 HTML 编码的字符串。
isbn
: 用于验证字段的值是否是国际标准书号。
isbn10
: 用于验证字段的值是否是国际标准书号 10 位格式。
isbn13
: 用于验证字段的值是否是国际标准书号 13 位格式。
iso3166_1_alpha2
: 用于验证字段的值是否是两位字母国家代码(ISO 3166-1 alpha-2)。
iso3166_1_alpha3
: 用于验证字段的值是否是三位字母国家代码(ISO 3166-1 alpha-3)。
iso3166_1_alpha_numeric
: 用于验证字段的值是否是数字国家代码(ISO 3166-1 numeric)。
iso3166_2
: 用于验证字段的值是否是国家分区代码(ISO 3166-2)。
iso4217
: 用于验证字段的值是否是货币代码(ISO 4217)。
json
: 用于验证字段的值是否是 JSON 格式。
jwt
: 用于验证字段的值是否是 JSON Web Token(JWT)。
latitude
: 用于验证字段的值是否是纬度。
longitude
: 用于验证字段的值是否是经度。
luhn_checksum
: 用于验证字段的值是否符合 Luhn 算法的校验和。
postcode_iso3166_alpha2
: 用于验证字段的值是否是邮政编码。
postcode_iso3166_alpha2_field
: 用于验证字段的值是否是邮政编码。
rgb
: 用于验证字段的值是否是 RGB 颜色字符串。
rgba
: 用于验证字段的值是否是 RGBA 颜色字符串。
ssn
: 用于验证字段的值是否是社会安全号码(SSN)。
timezone
: 用于验证字段的值是否是时区。
uuid
: 用于验证字段的值是否是通用唯一标识符(UUID)。
uuid3
: 用于验证字段的值是否是 UUIDv3。
uuid3_rfc4122
: 用于验证字段的值是否是UUIDv3(符合RFC 4122标准)。
uuid4
: 用于验证字段的值是否是 UUIDv4。
uuid4_rfc4122
: 用于验证字段的值是否是UUIDv4(符合RFC 4122标准)。
uuid5
: 用于验证字段的值是否是 UUIDv5。
uuid5_rfc4122
: 用于验证字段的值是否是UUIDv5(符合RFC 4122标准)。
uuid_rfc4122
: 用于验证字段的值是否是UUID(符合RFC 4122标准)。
md4
: 用于验证字段的值是否是MD4哈希。
md5
: 用于验证字段的值是否是MD5哈希。
sha256
: 用于验证字段的值是否是SHA256哈希。
sha384
: 用于验证字段的值是否是SHA384哈希。
sha512
: 用于验证字段的值是否是SHA512哈希。
ripemd128
: 用于验证字段的值是否是RIPEMD-128哈希。
ripemd160
: 用于验证字段的值是否是RIPEMD-160哈希。
tiger128
: 用于验证字段的值是否是TIGER128哈希。
tiger160
: 用于验证字段的值是否是TIGER160哈希。
tiger192
: 用于验证字段的值是否是TIGER192哈希。
semver
: 用于验证字段的值是否符合语义化版本2.0.0规范。
ulid
: 用于验证字段的值是否是有序可排序的唯一标识符(ULID)。
cve
: 用于验证字段的值是否是常见漏洞和公开漏洞标识符(CVE id)。
比较
eq
:用于比较值是否相等。如果字段的值与提供的值相等,则验证通过。
eq_ignore_case
:用于比较值是否相等,忽略大小写。如果字段的值与提供的值相等(不区分大小写),则验证通过。
gt
:用于比较值是否大于给定的值。如果字段的值大于提供的值,则验证通过。
gte
:用于比较值是否大于或等于给定的值。如果字段的值大于或等于提供的值,则验证通过。
lt
:用于比较值是否小于给定的值。如果字段的值小于提供的值,则验证通过。
lte
:用于比较值是否小于或等于给定的值。如果字段的值小于或等于提供的值,则验证通过。
ne
:用于比较值是否不相等。如果字段的值与提供的值不相等,则验证通过。
ne_ignore_case
:用于比较值是否不相等,忽略大小写。如果字段的值与提供的值不相等(不区分大小写),则验证通过。
其他
dir
:验证字段值是否为现有目录。
dirpath
:验证字段值是否为目录路径。
file
:验证字段值是否为现有文件。
filepath
:验证字段值是否为文件路径。
image
:验证字段值是否为图像文件。
isdefault
:验证字段值是否为默认值。
len
:验证字段值的长度。
max
:验证字段值是否不超过最大值。
min
:验证字段值是否不小于最小值。
oneof
:验证字段值是否属于指定的一组值之一。
required
:验证字段值是否为必需的。
required_if
:根据条件验证字段值是否为必需的。
required_unless
:除非满足条件,否则验证字段值是否为必需的。
required_with
:与指定字段同时验证字段值是否为必需的。
required_with_all
:与所有指定字段同时验证字段值是否为必需的。
required_without
:与指定字段之一不存在时验证字段值是否为必需的。
required_without_all
:与所有指定字段都不存在时验证字段值是否为必需的。
excluded_if
:根据条件验证字段值是否应该被排除。
excluded_unless
:除非满足条件,否则验证字段值是否应该被排除。
excluded_with
:与指定字段同时验证字段值是否应该被排除。
excluded_with_all
:与所有指定字段同时验证字段值是否应该被排除。
excluded_without
:与指定字段之一不存在时验证字段值是否应该被排除。
excluded_without_all
:与所有指定字段都不存在时验证字段值是否应该被排除。
unique
:验证字段值是否唯一。
iscolor
:用于验证字段值是否为有效的颜色值,可以是十六进制颜色码(hexcolor)、RGB颜色值(rgb)、RGBA颜色值(rgba)、HSL颜色值(hsl)或HSLA颜色值(hsla)。
country_code
:用于验证字段值是否为有效的国家/地区代码,可以是ISO 3166-1 alpha-2代码(iso3166_1_alpha2)、ISO 3166-1 alpha-3代码(iso3166_1_alpha3)或ISO 3166-1 alpha-numeric代码(iso3166_1_alpha_numeric)。
参考文档
validator
go-playground • Updated Aug 31, 2023