我希望将用户输入与功能联系起来.用户输入为字符串.例如,
"func_name=MyPrintf&s1=Hello, world\!"
个
或
"func_name=MyAdd&i1=1&i2=2"
每个函数的代码是,
func MyPrintf(s1 string) {
fmt.Println(s1)
}
func MyAdd(i1, i2 int) {
fmt.Println(i1, i2)
}
我想要一张下面这样的 map ,
type Myfunc func(string) | func(int, int) // <- Of course, it's wrong code, just I hope like this.
myMap := make(map[string]Myfunc)
myMap["MyPrintf"] = MyPrintf
myMap["MyAdd"] = MyAdd
MyMap可以通过用户输入中的func_name字符串调用函数.
myMap[func_name](s1)
个
输出:你好,世界!
myMap[func_name](i1, i2)
输出:3
有可能吗? 我想也许可以用‘val’,但我听说用‘val’不好.所以,我想使用函数指针,但是Golang中没有函数指针.
我try 了一些针对Golang的泛型编程,
type Myfunc interface {
func(string) | func(int, int)
}
myMap := make(map[string]Myfunc)
输出:出现错误:无法在类型约束之外使用类型Myfunc:接口包含类型约束
再试一次,
myMap := make(map[string]interface{})
myMap["MyPrintf"] = interface{}(MyPrintf)
myMap["MyPrintf"].(func(string))("Hello, world!")
输出:你好,世界!
myMap["MyAdd"] = interface{}(MyAdd)
myMap["MyAdd"].(func(int,int))(1, 2)
输出:3
它工作,但必须指定正确的func类型,这是不舒服.我认为这种方式不适合我的场景.请帮帮我 我为我糟糕的英语写作感到抱歉.