【问题标题】:Get the type of a function获取函数的类型
【发布时间】:2018-03-01 15:47:29
【问题描述】:

给出一个函数:

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】:

获取函数类型的最简单方法是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))
    }
}

【讨论】:

    猜你喜欢
    • 2017-09-14
    • 1970-01-01
    • 2016-07-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多