ホームページ > バックエンド開発 > Golang > Go の `init()` 関数はパッケージの初期化でどのように機能しますか?

Go の `init()` 関数はパッケージの初期化でどのように機能しますか?

Mary-Kate Olsen
リリース: 2024-12-22 08:01:10
オリジナル
439 人が閲覧しました

How Does Go's `init()` Function Work in Package Initialization?

Go の Init(): 正確な説明

Go プログラミング言語を使用する場合、init() がどのように動作するかを理解することが不可欠です。機能が動作します。この関数は、パッケージとその依存関係の初期化プロセスで重要な役割を果たします。

Effective Go:

で説明したように、パッケージ内のすべての変数宣言が初期化子を評価した後に init が呼び出されます。 、そしてそれらは、インポートされたすべてのパッケージが初期化された後にのみ評価されます。"

このステートメントは、すべてのパッケージの後で init() 関数が実行されることを示します。変数が初期化され、インポートされたすべてのパッケージが初期化された後。変数を初期化するということは、その初期化子を評価することを意味します。

さらに明確にするために、次のシナリオを考えてみましょう:

var WhatIsThe = AnswerToLife()

func AnswerToLife() int { // 1
    return 42
}

func init() { // 2
    WhatIsThe = 0
}

func main() { // 3
    if WhatIsThe == 0 {
        fmt.Println("It's all a lie.")
    }
}
ログイン後にコピー

この例では:

  1. AnswerToLife() init() の前に呼び出されます。
  2. AnswerToLife() は 42 を返し、割り当てます次に、
  3. init() が呼び出され、WhatIsThe が 0 に再割り当てされます。
  4. 最後に、main() が呼び出され、「それはすべて嘘です」と出力されます。 ."

これは、AnswerToLife() が init() の前に実行され、init() がmain() の前に実行されます。さらに、すべてのパッケージの依存関係と変数が初期化された後、init() が変数値の設定などのすべての初期化ロジックを実行することを強調しています。

init() は常に呼び出されることに注意することが重要です。 main() 関数があるかどうかは関係ありません。したがって、init() 関数を含むパッケージをインポートすると、その関数が実行されます。さらに、パッケージには複数の init() 関数を含めることができ、それらはファイル内に出現する順序で実行されます。

以上がGo の `init()` 関数はパッケージの初期化でどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート