go - 获取函数的类型

标签 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)

有更好的方法吗?

最佳答案

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

关于go - 获取函数的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49044275/

相关文章:

java - 当测试在完全相同的语句处崩溃时,为什么调用堆栈会不同?

c# - Use Reflection to Build a Class(构建一个动态的FileHelper类)

java - 如何动态类型转换java中反射API的newInstance()方法创建的对象

go - Flanneld:错误注册网络:找不到具有管理 IP 的网络

postgresql - 将足够多的参数传递给lib/pq

struct - 如何在没有反射的情况下将结构转储到字节数组中?

c# - 为什么 GetProperties 两次列出 protected 属性(在通用基类中声明)?

c# - 将具有随机行和列(由对象定义)的表导出到 Excel

json - Reflect vs Regex 检查 Golang 中的空 JSON 数组属性

go - Go语言错误处理问题/误解?