在 Go 中按参数和返回类型过滤函数
考虑一个场景,您有一个函数集合,需要有选择地选择那些满足特定条件,例如返回整数或将整数作为输入参数。这个任务可以通过使用 Golang 中的反射来完成。
reflect 包提供了对 Go 中类型和值的底层元数据的访问。通过利用reflect.ValueOf和reflect.Type,我们可以检查函数类型并检索有关其参数和返回值的信息。
要选择返回整数的函数,我们迭代列表中的每个函数并使用Reflect.ValueOf 来获取它的值。然后,我们使用 Reflect.Type 检索函数的类型,并使用 NumOut 和 Out 检查其返回值。如果任何返回值的类型是“int”,我们将该函数标记为“好”以便包含。
类似地,要选择采用整数作为参数的函数,我们会迭代该函数的 NumIn 参数并使用reflect.In 检查每个输入的类型。如果在输入类型中找到“int”,我们将该函数标记为“good”。
这是一个演示如何使用此方法的示例程序:
<code class="go">package main import ( "fmt" "reflect" ) func main() { funcs := make([]interface{}, 3, 3) funcs[0] = func(a int) int { return a + 1 } funcs[1] = func(a string) int { return len(a) } funcs[2] = func(a string) string { return ":(" } for _, fi := range funcs { f := reflect.ValueOf(fi) functype := f.Type() good := false for i := 0; i < functype.NumIn(); i++ { if functype.In(i).String() == "int" { good = true break } } for i := 0; i < functype.NumOut(); i++ { if functype.Out(i).String() == "int" { good = true break } } if good { fmt.Println(f) } } } ```` </code>
以上是如何使用反射根据参数和返回类型过滤 Go 函数?的详细内容。更多信息请关注PHP中文网其他相关文章!