亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果我包裝我的對象,Golang 轉換為自定義類型會失敗

如果我包裝我的對象,Golang 轉換為自定義類型會失敗

Go
慕碼人8056858 2023-03-21 15:12:09
在我的應用程序中,我用來validator.v9驗證我的模型。驗證后我可以投射error界面并且成功,我在控制臺上看到“OK”err := v.ModelValidator.Struct(model)if _, ok := err.(validator.ValidationErrors); ok {    fmt.Println("ValidateModel: OK")} else{    fmt.Println("ValidateModel: FALSE")}我需要將此對象包裝到另一個對象以供將來處理type errValidation struct {    error}func ValidationError(err error) error {    return errValidation{err}}但是,如果我嘗試將這個包裝對象轉換回上面validator.ValidationErrors第一個案例的轉換正下方的同一函數中,它將失敗e := ValidationError(err)if _, ok := e.(validator.ValidationErrors); ok {    fmt.Println("ValidationError: OK")} else{    fmt.Println("ValidationError: FALSE")}我在控制臺看到ValidateModel: OKValidationError: FALSE我怎樣才能使這個演員表從包裝的對象中發揮作用?ValidationErrors從"gopkg.in/go-playground/validator.v9"看起來像這樣type ValidationErrors []FieldErrorfunc (ve ValidationErrors) Error() string {     //.....}
查看完整描述

1 回答

?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

你的errValidation類型和validator.ValidationErrors類型是完全不同的,截然不同的類型。如果接口值包含具體類型的值errValidation,則只能從中鍵入斷言另一個具體類型errValidation。


所以這將起作用:


e := ValidationError(errors.New("some err"))

if _, ok := e.(errValidation); ok {

    fmt.Println("ValidationError: OK")

} else {

    fmt.Println("ValidationError: FALSE")

}

輸出將是(在Go Playground上嘗試):


ValidationError: OK


查看完整回答
反對 回復 2023-03-21
  • 1 回答
  • 0 關注
  • 92 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號