W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
校驗結(jié)果為一個?error
?錯誤對象,內(nèi)部使用?gvalid.Error
?對象實現(xiàn)。當(dāng)數(shù)據(jù)規(guī)則校驗成功時,校驗方法返回的結(jié)果為?nil
?。當(dāng)數(shù)據(jù)規(guī)則校驗失敗時,返回的該對象是包含結(jié)構(gòu)化的層級?map
?,包含多個字段及其規(guī)則及對應(yīng)錯誤信息,以便于接收端能夠準(zhǔn)確定位錯誤規(guī)則。相關(guān)數(shù)據(jù)結(jié)構(gòu)及方法如下:https://pkg.go.dev/github.com/gogf/gf/v2/util/gvalid
type Error interface {
Code() gcode.Code
Current() error
Error() string
FirstItem() (key string, messages map[string]error)
FirstRule() (rule string, err error)
FirstError() (err error)
Items() (items []map[string]map[string]error)
Map() map[string]error
Maps() map[string]map[string]error
String() string
Strings() (errs []string)
}
可以結(jié)合后續(xù)的示例理解這個數(shù)據(jù)結(jié)構(gòu)。我們可以通過?Maps()
?方法獲得該原始錯誤信息數(shù)據(jù)結(jié)構(gòu)?map
?。但在大多數(shù)時候我們可以通過?Error
?接口的其他方法來方便地獲取特定的錯誤信息。
大多數(shù)情況下,我們不關(guān)心具體出錯的校驗規(guī)則,可以使用?Error/String
?方法直接返回所有的錯誤信息即可。大部分的方法獲取錯誤信息時根據(jù)校驗規(guī)則的順序性與否,返回的結(jié)果順序會不太一樣。
簡要說明:
獲取校驗結(jié)果的值可以通過多個校驗結(jié)果方法獲取,為讓各位開發(fā)者有充分的理解,詳細(xì)說明以下:
方法 | 說明 |
?Code ? |
常用方法。實現(xiàn)?gerror ?的?Code ?接口,在校驗組件中,該方法固定返回錯誤碼?gcode.CodeValidationFailed ? |
?Error ? |
常用方法。實現(xiàn)標(biāo)準(zhǔn)庫的?error.Error ?接口,獲取返回所有校驗錯誤組成的錯誤字符串。內(nèi)部邏輯同?String ?方法 |
?Current ? |
常用方法。實現(xiàn)了?gerror ?的?Current ?接口,用于獲取校驗錯誤中的第一條錯誤對象 |
?Items ? |
在順序性校驗中將會按照校驗規(guī)則順序返回校驗錯誤數(shù)組。其順序性只有在順序校驗時有效,否則返回的結(jié)果是隨機的 |
?Map ? |
返回?FirstItem ?中的出錯自規(guī)則及對應(yīng)錯誤信息?map ? |
?Maps ? |
返回所有的出錯鍵名及對應(yīng)的出錯規(guī)則及對應(yīng)的錯誤信息(?map[string]map[string]error ?) |
?String ? |
返回所有的錯誤信息,構(gòu)成一條字符串返回,多個規(guī)則錯誤信息之間以?; ?符號連接。其順序性只有使用順序校驗規(guī)則時有效,否則返回的結(jié)果是隨機的 |
?Strings ? |
返回所有的錯誤信息,構(gòu)成?[]string ?類型返回。其順序性只有使用順序校驗規(guī)則時有效,否則返回的結(jié)果是隨機的 |
?FirstItem ? |
在有多個鍵名/屬性校驗錯誤的時候,用以獲取出錯的第一個鍵名,以及其對應(yīng)的出錯規(guī)則和錯誤信息。其順序性只有使用順序校驗規(guī)則時有效,否則返回的結(jié)果是隨機的 |
?FirstRule ? |
返回FirstItem中的第一條出錯的規(guī)則及錯誤信息。其順序性只有使用順序校驗規(guī)則時有效,否則返回的結(jié)果是隨機的 |
?FirstString ? |
返回FirstRule中的第一條規(guī)則錯誤信息。其順序性只有使用順序校驗規(guī)則時有效,否則返回的結(jié)果是隨機的 |
我們可以看到,?gvalid.Error
?實現(xiàn)了?Current() error
?接口,因此可以通過?gerror.Current
?方法獲取它的第一條錯誤信息,這在接口校驗失敗時返回錯誤信息非常方便。我們來看一個示例:
package main
import (
"github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gctx"
"github.com/gogf/gf/v2/util/gvalid"
)
func main() {
type User struct {
Name string `v:"required#請輸入用戶姓名"`
Type int `v:"required|min:1#|請選擇用戶類型"`
}
var (
err error
ctx = gctx.New()
user = User{}
)
if err = g.Validator().Data(user).Run(ctx); err != nil {
g.Dump(err.(gvalid.Error).Maps())
g.Dump(gerror.Current(err))
}
}
這里使用了?gerror.Current(err)
?來獲取校第一條驗錯誤信息。執(zhí)行后,終端輸出:
{
"Name": {
"required": "請輸入用戶姓名",
},
"Type": {
"min": "請選擇用戶類型",
},
}
"請輸入用戶姓名"
需要注意的是,數(shù)據(jù)校驗時存在順序性校驗和非順序性校驗,這會對獲取第一條錯誤信息的結(jié)果產(chǎn)生影響。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: