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

  

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章