go - 如何检查函数参数和类型

标签 go types parameters return

这个问题在这里已经有了答案:





How to get a function's signature as string in go

(1 个回答)


1年前关闭。




我有一个变量,它的值是一个函数,我想知道该函数的参数是什么,特别是参数的类型和返回值的类型。我可以在 Go 中检索这些信息吗?
在 Python 中,我可以使用 inspect.signature 函数来获取有关函数的信息——它的参数和该函数的参数类型以及返回值的类型。
例如在 Python 中,我可以这样做:

from inspect import signature


def a(b: int) -> str:
    return "text"


sig = signature(a)  // contains information about parameters and returned value
如何在 Go 中做到这一点?

最佳答案

使用 reflect检查类型的包:

t := reflect.TypeOf(f)  // get reflect.Type for function f.
fmt.Println(t)          // prints types of arguments and results

fmt.Println("Args:")
for i := 0; i < t.NumIn(); i++ {
    ti := t.In(i)       // get type of i'th argument
    fmt.Println("\t", ti) 
}
fmt.Println("Results:")
for i := 0; i < t.NumOut(); i++ {
    ti := t.Out(i)      // get type of i'th result
    fmt.Println("\t", ti)
}
Run it on the playground .

关于go - 如何检查函数参数和类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63102117/

相关文章:

go - Go中的竞争条件变化

scala - 使用 Scala 类型系统灵活断言基类具有附加属性的某种组合

java - 如何编写不同典型 Java 类的实例?

c++ - `int` 在 C++ 中默认是 `signed long int` 吗?

c# - 在方法参数中限制枚举值

json - 如何列出 Gorilla Mux 中的所有变量?

regex - 为什么我的正则表达式不匹配并替换字符串以将 urlencode 转换为新字符串?

go - Go包命名约定背后的想法是什么?

r - 如何在R中提取色散参数

java - 在另一个方法的参数输入中声明一个方法?