Golangのinit()関数を分析した記事

青灯夜游
リリース: 2022-10-26 19:17:36
転載
3654 人が閲覧しました

Golangのinit()関数を分析した記事

Go init 関数の詳細説明

各パッケージの初期化後、init() 関数が自動的に実行されます。実行優先順位は次のとおりです。 main関数の実行優先度よりも高い。 [関連する推奨事項: Go ビデオ チュートリアル ]

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

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

パッケージの初期化

インポートされたパッケージを使用するには、最初に初期化する必要があります。初期化は常に単一スレッドで、パッケージの依存関係の順序で実行されます。これは、以下に示すように、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 —>

パッケージを複数回インポートしても、初期化一度だけ行う必要があります。

特徴

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"
ログイン後にコピー

要約

上記がこの記事の全内容です。この記事の内容があなたの勉強や仕事の参考になれば幸いです。

元のアドレス: https://developpaper.com/detailed-explanation-of-init-function-in-go- language/

翻訳アドレス: https://learnku .com/go/t/47178

プログラミング関連の知識については、

プログラミング ビデオをご覧ください。 !

以上がGolangのinit()関数を分析した記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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