结构体
声明结构体 在结构体中添加字段标记来实现验证
举个栗子 🌰:
登录时必须包含 用户名 user 和 密码 password 则声明如下结构体
1
2
3
4
5
  | 
// Binding from JSON
type Login struct {
	User     string `form:"user" json:"user" xml:"user"  binding:"required"`
	Password string `form:"password" json:"password" xml:"password" binding:"required"`
}
  | 
 
binding:"required" 声明字段必须含有
绑定数据
gin.Context 中 调用 bind 方法绑定数据 (Must bind, Should bind 都可)
1
2
3
4
5
  | 
var json Login
if err := c.ShouldBindJSON(&json); err != nil {
	c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
	return
}
  | 
 
调用
1
2
3
4
  | 
if json.User != "manu" || json.Password != "123" {
	c.JSON(http.StatusUnauthorized, gin.H{"status": "unauthorized"})
	return
}
  | 
 
常用字段标记
Fields
  
      
          | Tag | 
          说明 | 
      
  
  
      
          | eqcsfield | 
          Field Equals Another Field (relative) 必须等于 struct Other 中 Field 的值 例: binding:“eqcsfield=Other.Field”` | 
      
      
          | eqfield | 
          Field Equals Another Field 必须等于 Field 例: binding:“eqfield=Field”` | 
      
      
          | fieldcontains | 
          NOT DOCUMENTED IN doc.go | 
      
      
          | fieldexcludes | 
          NOT DOCUMENTED IN doc.go | 
      
      
          | gtcsfield | 
          Field Greater Than Another Relative Field 必须大于 struct Other 中 Field 的值 例: binding:“gtcsfield=Other.Field”` | 
      
      
          | gtecsfield | 
          Field Greater Than or Equal To Another Relative Field 必须大于等于 struct Other 中 Field 的值 例:binding:“gtecsfield=Other.Field”` | 
      
      
          | gtefield | 
          Field Greater Than or Equal To Another Field 必须大于等于 Field 的值 | 
      
      
          | gtfield | 
          Field Greater Than Another Field 必须大于 Field 的值 | 
      
      
          | ltcsfield | 
          Less Than Another Relative Field 必须小于 struct Other 中 Field 的值 例: binding:“ltcsfield=Other.Field”` | 
      
      
          | ltecsfield | 
          Less Than or Equal To Another Relative Field 必须小于等于 struct Other 中 Field 的值 例: binding:“ltecsfield=Other.Field”` | 
      
      
          | ltefield | 
          Less Than or Equal To Another Field 必须小于等于 Field 的值 | 
      
      
          | ltfield | 
          Less Than Another Field 必须小于 Field 的值 | 
      
      
          | necsfield | 
          Field Does Not Equal Another Field (relative) 必须不等于 struct Other 中 Field 的值 例: binding:“necsfield=Other.Field”` | 
      
      
          | nefield | 
          Field Does Not Equal Another Field 必须不等 Field | 
      
  
 
Network:
  
      
          | Tag | 
          Description | 
      
  
  
      
          | cidr | 
          Classless Inter-Domain Routing CIDR | 
      
      
          | cidrv4 | 
          Classless Inter-Domain Routing CIDRv4 | 
      
      
          | cidrv6 | 
          Classless Inter-Domain Routing CIDRv6 | 
      
      
          | datauri | 
          Data URL | 
      
      
          | fqdn | 
          Full Qualified Domain Name (FQDN) | 
      
      
          | hostname | 
          Hostname RFC 952 | 
      
      
          | hostname_port | 
          HostPort | 
      
      
          | hostname_rfc1123 | 
          Hostname RFC 1123 | 
      
      
          | ip | 
          Internet Protocol Address IP | 
      
      
          | ip4_addr | 
          Internet Protocol Address IPv4 | 
      
      
          | ip6_addr | 
          Internet Protocol Address IPv6 | 
      
      
          | ip_addr | 
          Internet Protocol Address IP | 
      
      
          | ipv4 | 
          Internet Protocol Address IPv4 | 
      
      
          | ipv6 | 
          Internet Protocol Address IPv6 | 
      
      
          | mac | 
          Media Access Control Address MAC | 
      
      
          | tcp4_addr | 
          Transmission Control Protocol Address TCPv4 | 
      
      
          | tcp6_addr | 
          Transmission Control Protocol Address TCPv6 | 
      
      
          | tcp_addr | 
          Transmission Control Protocol Address TCP | 
      
      
          | udp4_addr | 
          User Datagram Protocol Address UDPv4 | 
      
      
          | udp6_addr | 
          User Datagram Protocol Address UDPv6 | 
      
      
          | udp_addr | 
          User Datagram Protocol Address UDP | 
      
      
          | unix_addr | 
          Unix domain socket end point Address | 
      
      
          | uri | 
          URI String | 
      
      
          | url | 
          URL String 验证字符串值包含有效的网址 | 
      
      
          | url_encoded | 
          URL Encoded | 
      
      
          | urn_rfc2141 | 
          Urn RFC 2141 String | 
      
  
 
Strings:
  
      
          | Tag | 
          Description | 
      
  
  
      
          | alpha | 
          Alpha Only | 
      
      
          | alphanum | 
          Alphanumeric | 
      
      
          | alphanumunicode | 
          Alphanumeric Unicode | 
      
      
          | alphaunicode | 
          Alpha Unicode | 
      
      
          | ascii | 
          ASCII | 
      
      
          | contains | 
          Contains | 
      
      
          | containsany | 
          Contains Any | 
      
      
          | containsrune | 
          Contains Rune | 
      
      
          | lowercase | 
          Lowercase | 
      
      
          | multibyte | 
          Multi-Byte Characters | 
      
      
          | number | 
          NOT DOCUMENTED IN doc.go | 
      
      
          | numeric | 
          Numeric | 
      
      
          | printascii | 
          Printable ASCII | 
      
      
          | startswith | 
          Starts With | 
      
      
          | uppercase | 
          Uppercase | 
      
  
 
  
      
          | Tag | 
          Description | 
      
  
  
      
          | base64 | 
          Base64 String | 
      
      
          | base64url | 
          Base64URL String | 
      
      
          | btc_addr | 
          Bitcoin Address | 
      
      
          | btc_addr_bech32 | 
          Bitcoin Bech32 Address (segwit) | 
      
      
          | datetime | 
          Datetime | 
      
      
          | email | 
          E-mail String 验证字符串是 email 格式 | 
      
      
          | eth_addr | 
          Ethereum Address | 
      
      
          | hexadecimal | 
          Hexadecimal String | 
      
      
          | hexcolor | 
          Hexcolor String | 
      
      
          | hsl | 
          HSL String | 
      
      
          | hsla | 
          HSLA String | 
      
      
          | html | 
          HTML Tags | 
      
      
          | html_encoded | 
          HTML Encoded | 
      
      
          | isbn | 
          International Standard Book Number | 
      
      
          | isbn10 | 
          International Standard Book Number 10 | 
      
      
          | isbn13 | 
          International Standard Book Number 13 | 
      
      
          | json | 
          JSON | 
      
      
          | latitude | 
          Latitude | 
      
      
          | longitude | 
          Longitude | 
      
      
          | rgb | 
          RGB String | 
      
      
          | rgba | 
          RGBA String | 
      
      
          | ssn | 
          Social Security Number SSN | 
      
      
          | uuid | 
          Universally Unique Identifier UUID | 
      
      
          | uuid3 | 
          Universally Unique Identifier UUID v3 | 
      
      
          | uuid3_rfc4122 | 
          Universally Unique Identifier UUID v3 RFC4122 | 
      
      
          | uuid4 | 
          Universally Unique Identifier UUID v4 | 
      
      
          | uuid4_rfc4122 | 
          Universally Unique Identifier UUID v4 RFC4122 | 
      
      
          | uuid5 | 
          Universally Unique Identifier UUID v5 | 
      
      
          | uuid5_rfc4122 | 
          Universally Unique Identifier UUID v5 RFC4122 | 
      
      
          | uuid_rfc4122 | 
          Universally Unique Identifier UUID RFC4122 | 
      
  
 
Comparisons:
  
      
          | Tag | 
          说明 | 
      
  
  
      
          | eq | 
          Equals 数字等于 n,或者或者数组、切片、map 的 len 值为 n,即包含的项目数 | 
      
      
          | gt | 
          Greater than 数字大于 n,或者或者数组、切片、map 的 len 值大于 n,即包含的项目数大于 n | 
      
      
          | gte | 
          Greater than or equal 数字大于或等于 n,或者或者数组、切片、map 的 len 值大于或等于 n,即包含的项目数大于或等于 n | 
      
      
          | lt | 
          Less Than 数字小于 n,或者或者数组、切片、map 的 len 值小于 n,即包含的项目数小于 n | 
      
      
          | lte | 
          Less Than or Equal 数字小于或等于 n,或者或者数组、切片、map 的 len 值小于或等于 n,即包含的项目数小于或等于 n | 
      
      
          | ne | 
          Not Equal 数字不等于 n,或者或者数组、切片、map 的 len 值不等于为 n,即包含的项目数不为 n,其和 eq 相反 | 
      
  
 
Other:
  
      
          | Tag | 
          Description | 
      
  
  
      
          | dir | 
          Directory | 
      
      
          | e164 | 
          NOT DOCUMENTED IN doc.go | 
      
      
          | endswith | 
          Ends With | 
      
      
          | excludes | 
          Excludes | 
      
      
          | excludesall | 
          Excludes All 不能包含特殊字符, 注意用十六进制表示 例: binding:“excludesall=0x2C”` | 
      
      
          | excludesrune | 
          Excludes Rune | 
      
      
          | file | 
          File path | 
      
      
          | isdefault | 
          Is Default | 
      
      
          | len | 
          Length 字符长度必须等于 n,或者数组、切片、map 的 len 值为 n,即包含的项目数 | 
      
      
          | max | 
          Maximum 字符串最大长度 | 
      
      
          | min | 
          Minimum 字符串最小长度 | 
      
      
          | oneof | 
          One Of | 
      
      
          | required | 
          Required 必须 | 
      
      
          | required_with | 
          Required With | 
      
      
          | required_with_all | 
          Required With All | 
      
      
          | required_without | 
          Required Without | 
      
      
          | required_without_all | 
          Required Without All | 
      
      
          | unique | 
          Unique | 
      
  
 
后记
官方验证事例 看这里
gin中内置 
数据验证库文档 看这里