获取函数的类型

问题描述 投票:1回答:1

给一个功能:

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

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

t := reflect.TypeOf(myFunc)

要么

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

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

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

有一个更好的方法吗?

go reflection
1个回答
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))
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.