0

Go では、特定のパッケージに複数の関数を定義できます。これらのinit関数はすべて、実行前に不特定の順序で実行されます。このような関数を複数持つことの 1 つの結果は、通常のコードでそれらを呼び出したり識別したりすることが不可能になることです。たとえば、次はコンパイルされません。

func main() {
    fmt.Println(init)
}
func init() { }

( Go プレイグラウンドの例については、こちらを参照してください) 私の質問は、複数の init 関数を使用できることでどのような利点が得られるかということです。複数の init 関数なければ、init 関数を参照または呼び出すことができますか?

4

1 に答える 1

1

複数の関数を持つことができる利点は、主に局所性によって読みやすさが向上するという IMO です。すべての関数を 1 つinitに集中させる必要がある場合は、リモートではなく、初期化されるものの横に初期化関数を記述できます。initところで、別のソースファイルにある可能性もあります。

仮想のパッケージごとの単一init関数の関数ポインターを取得することも、おそらく禁止されます。その理由は、そのようなポインターを使用すると、場合によってはinit関数を「順不同で」呼び出すことができるためです。その依存関係を実行する前にinit-他のパッケージの他の機能。それは、特定の保証を破るでしょう。

于 2013-07-19T09:41:39.810 に答える