提供一个功能:
type myFunc func(...interface{}) (interface{})
我想获得myFunc的类型,例如:
t := reflect.TypeOf(myFunc)
或者
t := reflect.TypeOf((*myFunc)(nil))
我发现这样做的唯一方法是首先创建myFunc的临时变量,然后从中获取TypeOf。
var v myFunc
t := reflect.TypeOf(v)
有更好的方法吗?
答案 0 :(得分:3)
获取函数类型的最简单方法是reflect.TypeOf(myFunc(nil))
。
package main
import (
"fmt"
"reflect"
)
type myFunc func(...interface{}) interface{}
func main() {
t := reflect.TypeOf(myFunc(nil))
// Print whether function type is variadic
fmt.Println("Variadic =", t.IsVariadic())
// Print out every input type
for i := 0; i < t.NumIn(); i++ {
fmt.Println("In", i, "=", t.In(i))
}
// Print out every output type
for i := 0; i < t.NumOut(); i++ {
fmt.Println("Out", i, "=", t.Out(i))
}
}