use*_*860 1 reflection go swagger
我在go-swagger包中找到了这种验证.
// Required validates an interface for requiredness
func Required(path, in string, data interface{}) *errors.Validation {
val := reflect.ValueOf(data)
if reflect.DeepEqual(reflect.Zero(val.Type()), val) {
return errors.Required(path, in)
}
return nil
}
Run Code Online (Sandbox Code Playgroud)
我试图使用它,这迫使我做了一些想法.
为什么以下不是真实的陈述?
exper := int32(0)
reflect.DeepEqual(
reflect.Zero(reflect.ValueOf(exper).Type()),
reflect.ValueOf(exper)
)
Run Code Online (Sandbox Code Playgroud)
请检查godocs的reflect.Value:
在两个值上使用==不会比较它们所代表的基础值,而是比较值结构的内容.要比较两个值,请比较Interface方法的结果.
package main
import "reflect"
func main() {
//var i int32
exper := int32(0)
r := reflect.DeepEqual(
reflect.Zero(reflect.ValueOf(exper).Type()).Interface(),
reflect.ValueOf(exper).Interface(),
)
println(r) // true
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |