获取函数的类型

时间:2018-03-01 07:03:00

标签: go reflection

提供一个功能:

type myFunc func(...interface{}) (interface{})

我想获得myFunc的类型,例如:

t := reflect.TypeOf(myFunc)

或者

t := reflect.TypeOf((*myFunc)(nil))

我发现这样做的唯一方法是首先创建myFunc的临时变量,然后从中获取TypeOf。

var v myFunc
t := reflect.TypeOf(v)

有更好的方法吗?

1 个答案:

答案 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))
    }
}