掃二維碼與項目經理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流
校驗結果為一個?error?錯誤對象,內部使用?gvalid.Error?對象實現(xiàn)。當數(shù)據(jù)規(guī)則校驗成功時,校驗方法返回的結果為?nil?。當數(shù)據(jù)規(guī)則校驗失敗時,返回的該對象是包含結構化的層級?map?,包含多個字段及其規(guī)則及對應錯誤信息,以便于接收端能夠準確定位錯誤規(guī)則。相關數(shù)據(jù)結構及方法如下:https://pkg.GO.dev/github.com/gogf/gf/v2/util/gvalid

公司專注于為企業(yè)提供成都網(wǎng)站建設、網(wǎng)站制作、微信公眾號開發(fā)、購物商城網(wǎng)站建設,微信平臺小程序開發(fā),軟件按需網(wǎng)站設計等一站式互聯(lián)網(wǎng)企業(yè)服務。憑借多年豐富的經驗,我們會仔細了解各客戶的需求而做出多方面的分析、設計、整合,為客戶設計出具風格及創(chuàng)意性的商業(yè)解決方案,創(chuàng)新互聯(lián)更提供一系列網(wǎng)站制作和網(wǎng)站推廣的服務。
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)
}可以結合后續(xù)的示例理解這個數(shù)據(jù)結構。我們可以通過?Maps()?方法獲得該原始錯誤信息數(shù)據(jù)結構?map?。但在大多數(shù)時候我們可以通過?Error?接口的其他方法來方便地獲取特定的錯誤信息。
大多數(shù)情況下,我們不關心具體出錯的校驗規(guī)則,可以使用?Error/String?方法直接返回所有的錯誤信息即可。大部分的方法獲取錯誤信息時根據(jù)校驗規(guī)則的順序性與否,返回的結果順序會不太一樣。
簡要說明:
獲取校驗結果的值可以通過多個校驗結果方法獲取,為讓各位開發(fā)者有充分的理解,詳細說明以下:
| 方法 | 說明 |
?Code? | 常用方法。實現(xiàn)?gerror?的?Code?接口,在校驗組件中,該方法固定返回錯誤碼?gcode.CodeValidationFailed? |
?Error? | 常用方法。實現(xiàn)標準庫的?error.Error?接口,獲取返回所有校驗錯誤組成的錯誤字符串。內部邏輯同?String?方法 |
?Current? | 常用方法。實現(xiàn)了?gerror?的?Current?接口,用于獲取校驗錯誤中的第一條錯誤對象 |
?Items? | 在順序性校驗中將會按照校驗規(guī)則順序返回校驗錯誤數(shù)組。其順序性只有在順序校驗時有效,否則返回的結果是隨機的 |
?Map? | 返回?FirstItem?中的出錯自規(guī)則及對應錯誤信息?map? |
?Maps? | 返回所有的出錯鍵名及對應的出錯規(guī)則及對應的錯誤信息(?map[string]map[string]error?) |
?String? | 返回所有的錯誤信息,構成一條字符串返回,多個規(guī)則錯誤信息之間以?;?符號連接。其順序性只有使用順序校驗規(guī)則時有效,否則返回的結果是隨機的 |
?Strings? | 返回所有的錯誤信息,構成?[]string?類型返回。其順序性只有使用順序校驗規(guī)則時有效,否則返回的結果是隨機的 |
?FirstItem? | 在有多個鍵名/屬性校驗錯誤的時候,用以獲取出錯的第一個鍵名,以及其對應的出錯規(guī)則和錯誤信息。其順序性只有使用順序校驗規(guī)則時有效,否則返回的結果是隨機的 |
?FirstRule? | 返回FirstItem中的第一條出錯的規(guī)則及錯誤信息。其順序性只有使用順序校驗規(guī)則時有效,否則返回的結果是隨機的 |
?FirstString? | 返回FirstRule中的第一條規(guī)則錯誤信息。其順序性只有使用順序校驗規(guī)則時有效,否則返回的結果是隨機的 |
我們可以看到,?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ù)校驗時存在順序性校驗和非順序性校驗,這會對獲取第一條錯誤信息的結果產生影響。

我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流