亲您好,关于go:在GoLang中将字符串投射为func类型goCasting a string to a func type in GoLang我有一个字符串,它是GoLang中函数的名称。我想将它们视为功能。 我应该怎么做? 我试图通过反射来实现它。*但是我没有找到适合我目的的有效路径。我在JSON文件中获得处理程序的名称,并且我想执行这些处理程序。 像这样:"students/show" :"ShowStudents", "students/add" :"AddStudents"}然后我想执行ShowStudents(),但不知道如何将其视为类型为func的变量 相关讨论需要明确的是,Go不支持其他语言(例如C ++)那样的强制转换。 标题暗示不可能的事情。 但是,可以通过其他方式实现您的追求。您的任务可以分为两个步骤:提取函数名称运行这些函数(假设它们在某处定义)对于第1步,我将把JSON解组到map [string] string中,如下所示:b, err := ioutil.ReadFile(fname)mp := make(map[string]string)json.Unmarshal(b, &mp)转到步骤2。在Go中,不可能将string直接转换为函数调用,但是可以使用reflect包枚举对象的方法。 在这种情况下,可以将其用作解决方法。 与其直接编写这些函数,不如将它们绑定到一个虚拟类型,如下所示:1234567891011121314type T intfunc (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)}运行这个例子在json文件中的键和函数之间建立映射,然后使用它们来调用出现在json中的函数package mainimport ( "encoding/json" "fmt")func AddStudents() { fmt.Println("woo")}func ShowStudents() { fmt.Println("lots of students")}func main() { js := `{ "students/show" :"ShowStudents", "students/add" :"AddStudents"}` lookup := make(map[string]string) json.Unmarshal([]byte(js), &lookup) dispatch := make(map[string]func()) dispatch["students/show"] = ShowStudents dispatch["students/add"] = AddStudents for v, _ := range lookup { print(v) dispatch[v]()