go - 在 GoLang 中将字符串转换为 func 类型

标签 go

我有一个字符串,它是 GoLang 中函数的名称。 我想将它们视为功能。我应该怎么做?我试图通过反射来实现它。* 但我没有找到适合我目的的有效路径。

我在 JSON 文件中获取了处理程序的名称,我想执行这些处理程序。像这样:

{
  "students/show" : "ShowStudents",
  "students/add" : "AddStudents"
}

然后我想执行ShowStudents(),但不知道如何把它当作func类型的变量来对待

最佳答案

您的任务可以分为两个步骤:

  1. 提取函数名称
  2. 运行这些函数(假设它们在某处定义)

对于第 1 步,我会将 JSON 解码为 map[string]string,如下所示:

b, err := ioutil.ReadFile(fname)
mp := make(map[string]string)
json.Unmarshal(b, &mp)

来到第 2 步。在 Go 中,不可能将 string 直接转换为函数调用,但可以使用 reflect 枚举对象的方法包裹。在这种情况下,这可以用作解决方法。不要直接编写这些函数,而是将它们绑定(bind)到虚拟类型,如下所示:

type T int

func (t T) ShowStudents() {
    fmt.Println("Showing Students")
}

func (t T) AddStudents() {
    fmt.Println("Adding Students")
}

func main() {
    var t T
    reflect.ValueOf(t).MethodByName("ShowStudents").Call(nil)
}

Run this example

关于go - 在 GoLang 中将字符串转换为 func 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53579628/

相关文章:

intellij-idea - IntelliJ的golang插件中 "system environment"是什么意思?

go - Go 项目的正确目录结构?

eclipse - Go语言配置

golang webservice意外崩溃,没有错误

google-app-engine - 如何使用第三方版本的 appengine?

mongodb - mgo 中的 Golang 和 mongodb 查询

azure - 更新 azure-sdk-for-go 库依赖项

c - 如何将 slice 发送到 Go 中的函数?

在 Windows 10 64 位分割错误上使用 Fitz 将 PDF 转换为图像

go - 如何制作unix套接字监听器