@
- 寫在前面
- validator
- install
- Fields:
- Network:
- Strings:
- Format:
- Comparisons:
- Other:
- validate
- 參考資料
基礎/標準庫/第三方庫
golang 導航
程式設計規範
演算法|面試
專案
寫在前面
- 相關博文
- 個人部落格首頁
- 免責宣告:僅供學習交流使用!開源框架可能存在的風險和相關後果將完全由使用者自行承擔,本人不承擔任何法律責任。
validator
install
go get github.com/go-playground/validator/v10
Fields:
Tag |
Description |
eqcsfield |
Field Equals Another Field (relative) |
eqfield |
Field Equals Another Field |
fieldcontains |
Check the indicated characters are present in the Field |
fieldexcludes |
Check the indicated characters are not present in the field |
gtcsfield |
Field Greater Than Another Relative Field |
gtecsfield |
Field Greater Than or Equal To Another Relative Field |
gtefield |
Field Greater Than or Equal To Another Field |
gtfield |
Field Greater Than Another Field |
ltcsfield |
Less Than Another Relative Field |
ltecsfield |
Less Than or Equal To Another Relative Field |
ltefield |
Less Than or Equal To Another Field |
ltfield |
Less Than Another Field |
necsfield |
Field Does Not Equal Another Field (relative) |
nefield |
Field Does Not Equal Another 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 |
http_url |
HTTP 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 |
boolean |
Boolean |
contains |
Contains |
containsany |
Contains Any |
containsrune |
Contains Rune |
endsnotwith |
Ends Not With |
endswith |
Ends With |
excludes |
Excludes |
excludesall |
Excludes All |
excludesrune |
Excludes Rune |
lowercase |
Lowercase |
multibyte |
Multi-Byte Characters |
number |
Number |
numeric |
Numeric |
printascii |
Printable ASCII |
startsnotwith |
Starts Not With |
startswith |
Starts With |
uppercase |
Uppercase |
Tag |
Description |
base64 |
Base64 String |
base64url |
Base64URL String |
base64rawurl |
Base64RawURL String |
bic |
Business Identifier Code (ISO 9362) |
bcp47_language_tag |
Language tag (BCP 47) |
btc_addr |
Bitcoin Address |
btc_addr_bech32 |
Bitcoin Bech32 Address (segwit) |
credit_card |
Credit Card Number |
mongodb |
MongoDB ObjectID |
cron |
Cron |
spicedb |
SpiceDb ObjectID/Permission/Type |
datetime |
Datetime |
e164 |
e164 formatted phone number |
email |
E-mail String |
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 |
issn |
International Standard Serial Number |
iso3166_1_alpha2 |
Two-letter country code (ISO 3166-1 alpha-2) |
iso3166_1_alpha3 |
Three-letter country code (ISO 3166-1 alpha-3) |
iso3166_1_alpha_numeric |
Numeric country code (ISO 3166-1 numeric) |
iso3166_2 |
Country subdivision code (ISO 3166-2) |
iso4217 |
Currency code (ISO 4217) |
json |
JSON |
jwt |
JSON Web Token (JWT) |
latitude |
Latitude |
longitude |
Longitude |
luhn_checksum |
Luhn Algorithm Checksum (for strings and (u)int) |
postcode_iso3166_alpha2 |
Postcode |
postcode_iso3166_alpha2_field |
Postcode |
rgb |
RGB String |
rgba |
RGBA String |
ssn |
Social Security Number SSN |
timezone |
Timezone |
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 |
md4 |
MD4 hash |
md5 |
MD5 hash |
sha256 |
SHA256 hash |
sha384 |
SHA384 hash |
sha512 |
SHA512 hash |
ripemd128 |
RIPEMD-128 hash |
ripemd128 |
RIPEMD-160 hash |
tiger128 |
TIGER128 hash |
tiger160 |
TIGER160 hash |
tiger192 |
TIGER192 hash |
semver |
Semantic Versioning 2.0.0 |
ulid |
Universally Unique Lexicographically Sortable Identifier ULID |
cve |
Common Vulnerabilities and Exposures Identifier (CVE id) |
Comparisons:
Tag |
Description |
eq |
Equals |
eq_ignore_case |
Equals ignoring case |
gt |
Greater than |
gte |
Greater than or equal |
lt |
Less Than |
lte |
Less Than or Equal |
ne |
Not Equal |
ne_ignore_case |
Not Equal ignoring case |
Other:
Tag |
Description |
dir |
Existing Directory |
dirpath |
Directory Path |
file |
Existing File |
filepath |
File Path |
image |
Image |
isdefault |
Is Default |
len |
Length |
max |
Maximum |
min |
Minimum |
oneof |
One Of |
required |
Required |
required_if |
Required If |
required_unless |
Required Unless |
required_with |
Required With |
required_with_all |
Required With All |
required_without |
Required Without |
required_without_all |
Required Without All |
excluded_if |
Excluded If |
excluded_unless |
Excluded Unless |
excluded_with |
Excluded With |
excluded_with_all |
Excluded With All |
excluded_without |
Excluded Without |
excluded_without_all |
Excluded Without All |
unique |
Unique |
Aliases:
Tag |
Description |
iscolor |
hexcolor|rgb|rgba|hsl|hsla |
country_code |
iso3166_1_alpha2|iso3166_1_alpha3|iso3166_1_alpha_numeric |
Benchmarks
validate
regular
type UserBasic struct {
Phone string `json:"phone" form:"phone" valid:"matches(^1[3-9]{1}\\d{9}$)"` // 正則
}
example
import (
"fmt"
"github.com/smokezl/govalidators"
)
type Class struct {
Cid int64 `validate:"required||integer=10000,_"`
Cname string `validate:"required||string=1,5||unique"`
BeginTime string `validate:"required||datetime=H:i"`
}
type Student struct {
Uid int64 `validate:"required||integer=10000,_"`
Name string `validate:"required||string=1,5"`
Age int64 `validate:"required||integer=10,30"`
Sex string `validate:"required||in=male,female"`
Email string `validate:"email||user||vm"`
PersonalPage string `validate:"url"`
Hobby []string `validate:"array=_,2||unique||in=swimming,running,drawing"`
CreateTime string `validate:"datetime"`
Class []Class `validate:"array=1,3"`
}
required
判斷欄位對應的值是否是對應型別的零值
integer、array、string
表示欄位型別是否是整數型別,如果integer後邊不接=?,?,那麼表示只判斷是否是整數型別,如果後邊接=?,?,那麼有四種寫法
- (1). integer=10 表示欄位值 = 10
- (2). integer=_ ,10 表示欄位值 <= 10,欄位值最小值為欄位對應型別的最小值(比如欄位對應型別為int8,那麼最小為−128),最大值為10
- (3). integer=10, _ 表示欄位值 >= 10,欄位值最小值為10,最大值為欄位對應型別的最大值(比如欄位對應型別為int8,那麼最大為127)
- (4). integer=1,20 表示欄位值 >=1 並且 <= 20
mail
表示欄位值是否是合法的email地址
url
表示欄位值是否是合法的url地址
in
表示欄位值在in指定的值中,比如 Hobby 欄位中,in=swimming,running,drawing,表示 Hobby 欄位的值,只能swimming,running,drawing中的一個或多個
datetime
表示欄位值符合日期型別,如果datetime後邊不接=?,那麼預設為Y-m-d H:i:s,否則驗證器會按照指定格式判斷,比如 datetime=Y-m、datetime=Y/m/d H:i:s等,可以是Y m d H i s 的隨意拼接
unique
表示欄位值唯一,比如 Hobby 欄位的 unique,表示 Hobby 欄位值唯一,Class 中,Cname 欄位的 unique,表示 Cname 欄位值唯一
valid:"matches(^1[3-9]{1}\\d{9}$)"
正則匹配
validator := govalidators.New()
student := &Student{
Uid: 1234567,
Name: "張三1111",
Age: 31,
Sex: "male1",
Email: "@qq.com",
PersonalPage: "www.abcd.com",
Hobby: []string{"swimming", "singing"},
CreateTime: "2018-03-03 05:60:00",
Class: []Class{
Class{
Cid: 12345678,
Cname: "語文",
BeginTime: "13:00",
},
Class{
Cid: 22345678,
Cname: "數學",
BeginTime: "13:00",
},
Class{
Cid: 32345678,
Cname: "數學",
BeginTime: "13:60",
},
},
}
errList := validator.Validate(student)
if errList != nil {
for _, err := range errList {
fmt.Println("err:", err)
}
}
參考資料
基礎/標準庫/第三方庫
- 地鼠文件:比較多資料
- topgoer
- go awesome
- golang 文件學習
- golang 標準庫
- go 檔案常用操作
golang 導航
- golang 收集
- go-guide
- golang 導航
- go-concurrency-guide
- go-advice
- golang 知識路線
程式設計規範
- golang 程式設計規範
- golang 規範示例
演算法|面試
- cs 面試
- 面試網站
- Golang後端研發崗位相關面試題和簡歷
- 路人張的面試筆記
- golang 演算法
專案
- golang 專案推薦
- 7天系列
- go專案推薦
- go高效能程式設計