我有以下内容:
func NewMethodDescriptor(typ interface{}) *MethodDescriptor {
reflectedMethod := reflect.ValueOf(typ)
methodType := reflectedMethod.Type
paramCount := methodType.NumIn() - 1
...
但当我尝试:
NewMethodDescriptor(func(){})
我得到这个编译时错误:
methodType.NumIn undefined (type func() reflect.Type has no field or method NumIn)
更具体地说:
-
reflectedMethod.Type
返回函数func (v Value) Type() Type
-
reflectedMethod.Type()
返回结果,表示v的类型。
你可以在"用反射包分析任何函数的乐趣"中看到一个更完整的例子。
func FuncAnalyse(m interface{}) {
//Reflection type of the underlying data of the interface
x := reflect.TypeOf(m)
numIn := x.NumIn() //Count inbound parameters
numOut := x.NumOut() //Count outbounding parameters
fmt.Println("Method:", x.String())
fmt.Println("Variadic:", x.IsVariadic()) // Used (<type> ...) ?
fmt.Println("Package:", x.PkgPath())
}