Go 言語では、パッケージの初期化に init() メソッドが使用され、各パッケージの初期化後に init() 関数が自動的に実行され、その実行優先度はメインの実行優先度よりも高くなります。関数。 init() メソッドは通常、1. 変数の初期化、2. ステータスの確認/修復、3. レジストラ、4. 計算の実行に使用されます。 init() 関数は、プログラムの実行中に自動的に呼び出されて実行されます。コード内で積極的に呼び出すことはできません。さまざまなパッケージの init 関数は、パッケージによってインポートされた依存関係に従って初期化関数の実行順序を決定します。
このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。
Go init 関数の詳細説明
Go 言語の init 関数は、パッケージ (パッケージ) を初期化するために使用されます。重要な機能
プログラムが実行されると、import package ステートメントによってパッケージ内の init() 関数の呼び出しが自動的にトリガーされます。
各パッケージの初期化後、init() 関数が自動的に実行され、その実行優先度は main 関数の実行優先度よりも高くなります。
init() 関数にはパラメータも戻り値もないことに注意してください。
init 関数は通常、次の目的で使用されます:
計算の実行
#init() 関数は、プログラムの実行中に自動的に呼び出されて実行されます。コード内で積極的に呼び出すことはできません。
パッケージ初期化実行のシーケンスを次の図に示します。
結果は次のようになります。
10 Hello 沙河
init() 関数
#各パッケージは複数の init 関数を持つことができます
パッケージの各ソース ファイルは複数の init 関数を持つこともできます
複数の init 関数同じパッケージ内 Go 言語の実行順序には明確な定義はありません (説明)
異なるパッケージの init 関数は、インポートされた依存関係に従って初期化関数の実行順序を決定します。パッケージ
init 関数は他の関数から呼び出すことはできませんが、main 関数が実行される前に自動的に呼び出されます。
パッケージの初期化インポートされたパッケージを初期化します (再帰インポート) 初期値を計算し、ブロックで宣言された変数に割り当てますパッケージ内の初期化関数を実行
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 回だけで済みます。
機能の紹介
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 サイトの他の関連記事を参照してください。