我有一个字符串,它是 GoLang 中函数的名称。 我想将它们视为功能。我应该怎么做?我试图通过反射来实现它。* 但我没有找到适合我目的的有效路径。
我在 JSON 文件中获取了处理程序的名称,我想执行这些处理程序。像这样:
{
"students/show" : "ShowStudents",
"students/add" : "AddStudents"
}
然后我想执行ShowStudents()
,但不知道如何把它当作func
类型的变量来对待
最佳答案
您的任务可以分为两个步骤:
- 提取函数名称
- 运行这些函数(假设它们在某处定义)
对于第 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)
}
关于go - 在 GoLang 中将字符串转换为 func 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53579628/