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

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

Golang 創建執行接口方法的自定義驗證器

Golang 創建執行接口方法的自定義驗證器

Go
慕姐8265434 2023-01-03 13:59:29
我正在嘗試為杜松子酒創建自己的驗證器,但我希望它是“通用的”,所以比方說,我想要一個接口 IsValidtype IsValid interface {    IsValid() bool},并使一些結構在實現該接口的某些字段中具有綁定:“IsValid”。但我不知道如何編寫我的自定義驗證器來獲取該字段,將其轉換為 IsValid 接口,然后執行 isValid 方法。我正在使用 go-playground 驗證程序包:https ://github.com/go-playground/validatorif v, ok := binding.Validator.Engine().(*validator.Validate); ok {    // registering validation for isValid    v.RegisterValidation("isValid", func(fl validator.FieldLevel) bool {        isValidField := // TODO do something to cast it to that interface        return isValidField.IsValid()    })}
查看完整描述

1 回答

?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

該FieldLevel類型具有此方法:


// returns current field for validation

Field() reflect.Value

reflect.Value有這個方法:


func (v Value) Interface() (i any)

接口將 v 的當前值作為接口{}返回。它相當于:


var i interface{} = (v's underlying value)


如果 Value 是通過訪問未導出的結構字段獲得的,它會發生恐慌。


您可以使用類型斷言將interface{}/any值用作更具體的接口,如下所示:


var i interface{} = something

var x = i.(MyInterface)

如果該值i未實現,這將引起恐慌MyInterface。要檢查這種情況,可以使用替代形式:


var x, ok = i.(MyInterface)

if ok {

    // use x

} else {

    // type conversion failed

}

將它們放在一起,您的代碼將是這樣的:


isValidField, ok := fl.Field().Interface().(IsValid)


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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