Go言語でのinit()メソッドの用途は何ですか?

青灯夜游
リリース: 2023-01-07 12:07:18
オリジナル
3767 人が閲覧しました

Go 言語では、パッケージの初期化に init() メソッドが使用され、各パッケージの初期化後に init() 関数が自動的に実行され、その実行優先度はメインの実行優先度よりも高くなります。関数。 init() メソッドは通常、1. 変数の初期化、2. ステータスの確認/修復、3. レジストラ、4. 計算の実行に使用されます。 init() 関数は、プログラムの実行中に自動的に呼び出されて実行されます。コード内で積極的に呼び出すことはできません。さまざまなパッケージの init 関数は、パッケージによってインポートされた依存関係に従って初期化関数の実行順序を決定します。

Go言語でのinit()メソッドの用途は何ですか?

このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。

Go init 関数の詳細説明

Go 言語の init 関数は、パッケージ (パッケージ) を初期化するために使用されます。重要な機能

プログラムが実行されると、import package ステートメントによってパッケージ内の init() 関数の呼び出しが自動的にトリガーされます。

各パッケージの初期化後、init() 関数が自動的に実行され、その実行優先度は main 関数の実行優先度よりも高くなります。

init() 関数にはパラメータも戻り値もないことに注意してください。

init 関数は通常、次の目的で使用されます:

  • 変数の初期化
  • ステータスの確認/修正
  • Registrar
  • 計算の実行

#init() 関数は、プログラムの実行中に自動的に呼び出されて実行されます。コード内で積極的に呼び出すことはできません。

パッケージ初期化実行のシーケンスを次の図に示します。

Go言語でのinit()メソッドの用途は何ですか?

結果は次のようになります。

10
Hello 沙河
ログイン後にコピー

init() 関数

  • #init 関数は、パッケージ内の変数の初期化など、プログラムの実行前にパッケージを初期化するために使用される関数です。

    #各パッケージは複数の init 関数を持つことができます

  • パッケージの各ソース ファイルは複数の init 関数を持つこともできます

  • 複数の init 関数同じパッケージ内 Go 言語の実行順序には明確な定義はありません (説明)

  • 異なるパッケージの init 関数は、インポートされた依存関係に従って初期化関数の実行順序を決定します。パッケージ

  • init 関数は他の関数から呼び出すことはできませんが、main 関数が実行される前に自動的に呼び出されます。

    パッケージの初期化
  • インポートされたパッケージを使用するには、まず初期化する必要があります。初期化は常に単一スレッドで、パッケージの依存関係の順序で実行されます。これは、以下に示すように、Golang のランタイム システムによって制御されます。

インポートされたパッケージを初期化します (再帰インポート) 初期値を計算し、ブロックで宣言された変数に割り当てますパッケージ内の初期化関数を実行

  • ##initial.go
  • package main
    import "fmt"
    var _ int64=s()
    func init(){
      fmt.Println("init function --->")
    }
    func s() int64{
      fmt.Println("function s() --->")
      return 1
    }
    func main(){
      fmt.Println("main --->")
    }
    ログイン後にコピー
  • 実行結果
  • function s() —>
    init function —>
    main —>
    ログイン後にコピー
パッケージを複数回インポートしても、初期化は 1 回だけで済みます。

Go言語でのinit()メソッドの用途は何ですか?

機能の紹介

init 関数はパラメータを渡す必要も、値を返す必要もありません。 main とは異なり、init は宣言されていないため、参照できません。

package main
import "fmt"
func init(){
  fmt.Println("init")
}
func main(){
  init()
}
ログイン後にコピー

上記の関数「

未定義:init

」のコンパイル中にエラーが発生しました。 各ソース ファイルには複数の init 関数を含めることができます。各ソース ファイルに記述された「行進の道」には 1 つの init 関数しか含めることができないことに注意してください。これは少し異なります。そのため、次の検証に進みます。 。

package main
import "fmt"
func init(){
  fmt.Println("init 1")
}
func init(){
  fmt.Println("init2")
}
func main(){
  fmt.Println("main")
}
/* 实施结果:
init1
init2
main */
ログイン後にコピー
上記の例から、各ソース ファイルに複数の init 関数を含めることができることがわかります。

初期化関数の一般的な例は、初期式の値を設定することです。

var precomputed=[20]float64{}
func init(){
  var current float64=1
  precomputed[0]=current
  for i:=1;i<len(precomputed);i++{
    precomputed[i]=precomputed[i-1]*1.2
  }
}
ログイン後にコピー

上記のコード (ステートメント) では事前計算値として for ループを使用できないため、init 関数を使用してこの問題を解決できます。

Go パッケージ インポート ルールの副作用

Go は非常に厳密で、未使用のパッケージへの参照を許可しません。ただし、初期化を行うために init 関数を呼び出すためだけにパッケージを参照する場合もあります。空の識別子 (アンダースコア) の目的は、この問題を解決することです。

import _ "image/png"
ログイン後にコピー

【関連する推奨事項:

Go ビデオ チュートリアル

プログラミング教育 ]

以上がGo言語でのinit()メソッドの用途は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
関連するチュートリアル
人気のおすすめ
最新のコース
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!