golang中根据字符串执行制定的方法
golang中根据字符串执行制定的方法:
1、建立一个字典表
func func1(a string) string {
fmt.Println("func1", a)
return "f1"
}
func func2(a string) string {
fmt.Println("func2", a)
return "f2"
}
func TestReflect(t *testing.T) {
a := "test"
symbol := map[string]func(string) string{"func1": func1, "func2": func2}
fmt.Println(symbol["func2"](a))
}
这里比较简单,go语言中方法也是一种类型,所以完全可以这么写,但是这个有个局限,就是所有映射的方法的入参和返回必须要一样
2、使用reflact反射,核心思想一样,也是要建立一个映射表,好处是映射的方法的入参和返回不需要保持一致
func func1(b int, a string) (string, string) {
fmt.Println("func1", a)
return "f1", "b1"
}
func func2(a string) string {
fmt.Println("func2", a)
return "f2"
}
func TestReflect(t *testing.T) {
funMap := make(ControllerMapsType, 0)
vf := reflect.ValueOf(func1)
vf.Type().NumIn()
funMap["func1"] = vf
vf2 := reflect.ValueOf(func2)
vf2.Type().NumIn()
funMap["func2"] = vf2
params := []interface{}{11, "aa"}
in := make([]reflect.Value, len(params))
for k, param := range params {
in[k] = reflect.ValueOf(param)
}
result := funMap["func1"].Call(in) // result是一个数组
fmt.Println(result)
}

浙公网安备 33010602011771号