W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
如果將之前的示例代碼多執(zhí)行幾次之后會(huì)發(fā)現(xiàn),返回的結(jié)果是沒(méi)有排序的,而且字段及規(guī)則輸出的先后順序完全是隨機(jī)的。即使我們使用?FirstItem
?, ?FirstString()
?等其他方法獲取校驗(yàn)結(jié)果也是一樣,返回的校驗(yàn)結(jié)果不固定。那是因?yàn)樾r?yàn)的規(guī)則我們傳遞的是?map
?類型,而golang的?map
?類型并不具有有序性,因此校驗(yàn)的結(jié)果和規(guī)則一樣是隨機(jī)的,同一個(gè)校驗(yàn)結(jié)果的同一個(gè)校驗(yàn)方法多次獲取結(jié)果值返回的可能也不一樣了。
我們來(lái)改進(jìn)一下以上的示例:校驗(yàn)結(jié)果中如果不滿足?required
?那么返回對(duì)應(yīng)的錯(cuò)誤信息,否則才是后續(xù)的校驗(yàn)錯(cuò)誤信息;也就是說(shuō),返回的錯(cuò)誤信息應(yīng)當(dāng)和我設(shè)定規(guī)則時(shí)的順序一致。如下:
package main
import (
"fmt"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gctx"
)
func main() {
var (
ctx = gctx.New()
params = map[string]interface{}{
"passport": "",
"password": "123456",
"password2": "1234567",
}
rules = []string{
"passport@required|length:6,16#賬號(hào)不能為空|賬號(hào)長(zhǎng)度應(yīng)當(dāng)在{min}到{max}之間",
"password@required|length:6,16|same:password2#密碼不能為空|密碼長(zhǎng)度應(yīng)當(dāng)在{min}到{max}之間|兩次密碼輸入不相等",
"password2@required|length:6,16#",
}
)
err := g.Validator().Rules(rules).Data(params).Run(ctx)
if err != nil {
fmt.Println(err.Map())
fmt.Println(err.FirstItem())
fmt.Println(err.FirstError())
}
}
執(zhí)行后,終端輸出:
map[length:賬號(hào)長(zhǎng)度應(yīng)當(dāng)在6到16之間 required:賬號(hào)不能為空]
passport map[length:賬號(hào)長(zhǎng)度應(yīng)當(dāng)在6到16之間 required:賬號(hào)不能為空]
賬號(hào)不能為空
可以看到,我們想要校驗(yàn)結(jié)果滿足順序性,只需要將?rules
?參數(shù)的類型修改為?[]string
?,按照一定的規(guī)則設(shè)定即可,并且?msgs
?參數(shù)既可以定義到?rules
?參數(shù)中,也可以分開(kāi)傳入(使用第三個(gè)參數(shù))。?rules
?的這種滿足順序性校驗(yàn)結(jié)果返回的規(guī)則,我們稱之為?gvalid tag
?,與前面?Struct
?校驗(yàn)章節(jié)介紹的?gvalid tag
?一致。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: