我想在一個映射中包含我的所有命令,并從命令映射到一個執行工作的函數(只是一個標準的調度表)。我從以下代碼開始: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 關注
- 315 瀏覽
添加回答
舉報
0/150
提交
取消