我需要肯定地检查一个reflect.Type 是否是一个错误。错误没有反映类型。在 go reflect 中检查类型错误的正式/惯用方式是什么?Go Playground 完整示例//return map of default values, based on each return type of a function// error => err=nil// bool => true// struct => new structfunc getDefaultValue(originalFunction interface{}) map[int]reflect.Value { defaultValues := make(map[int]reflect.Value) typeOfFunc := reflect.ValueOf(originalFunction).Type() numOut := typeOfFunc.NumOut() //number of function returns for i := 0; i < numOut; i++ { typeOut := typeOfFunc.Out(i) // type of return for index i switch typeOut.Kind() { case reflect.Bool: defaultValues[i] = reflect.ValueOf(true) case reflect.Struct: defaultValues[i] = reflect.New(typeOut()).Elem() // --> How to identify reflect.Type error assuredly, using switch or if... //case reflect.error: //don't exists // var err error = nil // defaultValues[i] = reflect.ValueOf(&err).Elem() default: //var err error = nil //defaultValues[i] = reflect.ValueOf(&err).Elem() fmt.Println("type of return index ", i, " was not identified") } fmt.Println("type of return index ", i, typeOut, "kind", typeOut.Kind(), "assign to err ", typeOut.AssignableTo(reflect.TypeOf(errors.New("")))) } return defaultValues}
2 回答
德玛西亚99
TA贡献1770条经验 获得超3个赞
在 Goerror中并不是什么特别的东西。error只是一个预先声明的接口类型,所以它在反射中没有自己的 Kind。尝试一些东西:
errorInterface := reflect.TypeOf((*error)(nil)).Elem()
...
case reflect.Interface:
if typOute.Implements(errorInterface) // it's an error
- 2 回答
- 0 关注
- 238 浏览
添加回答
举报
0/150
提交
取消