Go:按名称查找函数

标签 go reflection casting type-safety go-reflect

我是输入安全的新手,不知道如何执行以下操作

package main

func test(){
    print("In Test")
}

func main(){
    a := "test"
    a()
}

最佳答案

如果您陈述您想要实现的目标,您可能会得到更好的答案,因为反射(reflection)通常不是最好的方法。但是reflect如果函数是类型上的方法( net/rpcexample of this ),将会有所帮助。

package main

import (
    "fmt"
    "reflect"
)

type T struct {}

func (T) Add(x, y int) int {
    return x + y
}

func main() {
    t := reflect.ValueOf(T{})
    m := t.MethodByName("Add")
    args := []reflect.Value{reflect.ValueOf(1), reflect.ValueOf(2)}
    fmt.Println(m.Call(args)[0].Int())
}

如果您想知道 godoc 这样的工具工作,他们解析源代码而不是使用反射。

编辑:Playground version

关于Go:按名称查找函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12127585/

相关文章:

go - Golang 中的 echo 命令

java - 如何通过反射找到所有具有特定参数的方法?

java - 如何创建一个可以存储不相关类的对象的变量

java - 动态调用方法时如何在 servlet 中显示输出

Golang,重新启动 panic 例程的正确方法

testing - 模拟 bufio.NewScanner 的标准输出流

go - 如何关闭或清理标准输出管道?

Java 从 int 到 char 的转换表现得很奇怪

ios - 将 NSNumber 转换为 Boolean 会为 iPhone 和 iPad 提供不同的结果

c++ - 将 int 转换为 enum 类的安全且可维护的方法