すべてのコマンドをマップに含めて、コマンドからジョブを実行する関数 (単なる標準ディスパッチ テーブル) にマップしたいと考えています。私は次のコードから始めました:
package main
import "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は、以下の回答として提供したアプローチを提案しました。再帰型を処理でき、すべてのコマンドのマップの静的初期化も可能です。