我想在一个映射中包含我的所有命令,并从命令映射到一个执行工作的函数(只是一个标准的调度表)。我从以下代码开始:package mainimport "fmt"func hello() { fmt.Print("Hello World!")}func list() { for key, _ := range whatever { fmt.Print(key) }}var whatever = map[string](func()) { "hello": hello, "list": list,}但是,它无法编译,因为函数和结构之间存在递归引用。尝试向前声明函数失败,并在定义时出现有关重新定义的错误,并且映射位于顶级。你如何定义这样的结构并在顶层初始化它们而不必使用init()函数。我在语言定义中没有看到好的解释。存在的前向引用用于“外部”函数,当我尝试前向声明函数时它不会编译。我也没有办法提前声明变量。更新:我正在寻找一种解决方案,它不需要您在启动程序或init()函数时显式填充变量。不确定这是否可行,但它适用于我所知道的所有可比语言。更新 2: FigmentEngine提出了一种方法,我在下面给出了答案。它可以处理递归类型,还允许对所有命令的映射进行静态初始化。
- 3 回答
- 0 关注
- 272 浏览
添加回答
举报
0/150
提交
取消