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:表示该字段在表单中

在这个例子中,当使用 ShouldBindShouldBindQuery 方法将表单数据绑定到 User 结构体时,Name 字段将从表单中的 name 字段获取值,Password 字段将从表单中的 password 字段获取值。

json:表示该字段在请求体中

通过使用json标签,可以指定字段的 JSON 名称、忽略字段、设置字段的 omitempty 选项等。
在这个例子中,当使用 json.Marshal 方法将 User 结构体转换为 JSON 字符串时,Name 字段将使用 name 作为键名,Password 字段将使用 password 作为键名。
在这个例子中,User结构体具有三个字段:IDNamePassword。其中,IDName字段都使用了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-playgroundUpdated Aug 31, 2023

© 孙东辉 2022 - 2024