【发布时间】:2021-08-01 04:42:31
【问题描述】:
上下文:
在 Echo 框架中使用自定义的 Binder 和 Validator。 binder 使用(interface{}, echo.Context) 的签名,但指针始终由echo.DefaultBinder 传递和检查。
当数组因某种未知原因被传递时,由于某种原因,我无法验证结构数组。因此,我正在尝试验证接口中的每个元素,如果此接口是数组或切片。
问题:
我找不到将interface 转换为value 而不是pointer 并遍历此数组的值以验证每个值的方法。
到目前为止我的代码:
func (cb *CustomBinder) Bind(i interface{}, c echo.Context) error {
db := new(echo.DefaultBinder)
validate := validator.New()
if err := db.Bind(i, c); err != nil {
return err
}
kind := reflect.ValueOf(i).Elem().Kind()
if kind == reflect.Array || kind == reflect.Slice {
// ... Iteration and Validation
} else {
if err := validate.Struct(i); err != nil {
return err
}
}
return nil
}
【问题讨论】:
标签: validation go pointers echo reflect