【发布时间】:2020-10-05 07:00:39
【问题描述】:
我的代码可以完美运行:
package main
import (
"fmt"
)
var funcMap = map[string]interface{}{
"hello": hello,
}
func main() {
callDynamically("hello")
}
func callDynamically(name string) {
funcMap[name].(func())()
}
func hello() {
fmt.Println("hello")
}
但是如果我尝试像这样在我的结构类型上定义hello(),我的大脑会发疯:
package main
import (
"fmt"
)
type myType struct {
field1 string
field2 string
funcMap map[string]interface{}
}
func main() {
mt := &myType{
field1: "qwe",
field2: "asd",
funcMap: map[string]interface{}{
"hello": (*myType).hello,
},
}
mt.callDynamically("hello")
}
func (mt *myType) callDynamically(name string) {
mt.funcMap[name].(func())()
}
func (mt *myType) hello() {
fmt.Println("hello")
}
https://play.golang.org/p/pPvmaL22_Td
我收到了这个错误:
panic: interface conversion: interface {} is func(*main.myType), not func()
当我的函数在自定义结构类型上定义时,我真的不明白如何在callDynamically 中调用func()。
有什么帮助吗?
谢谢。
【问题讨论】:
标签: go interface type-conversion