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)
}

  

 

 
posted @ 2022-06-23 17:06  一个和🔥有缘的人  阅读(178)  评论(0编辑  收藏  举报