Go 言語は、特殊な function-init() 関数を導入した、厳密に型指定されたコンパイル済み言語です。 init() 関数は main() 関数と同様、Go 言語の予約関数ですが、init() 関数にはエントリ パラメーターと戻り値がない点が異なります。
init() 関数はプログラム実行前に最初に実行される関数で、パッケージがインポートされていれば自動的に実行されます。言い換えれば、init() 関数はパッケージのコンストラクターとみなすことができ、パッケージに必要なデータを初期化するか、必要な操作を実行するために使用されます。
複数の init() 関数をパッケージ内で定義でき、それらは定義された順序で実行されます。ただし、複数の init() 関数が実行される順序は非常に予測できない可能性があるため、これはお勧めできません。したがって、唯一の提案は、いくつかの初期化操作を順番に実行する必要がない限り、パッケージ内で複数の init() 関数を定義しないようにすることです。
init() メソッドの役割をより深く理解するために、いくつかの例を使用してみましょう:
最初の例:
package main import "fmt" func init() { fmt.Println("init方法被调用") } func main() { fmt.Println("main方法被调用") }
プログラムを実行すると、次の出力が表示されます。
init方法被调用 main方法被调用
この例から、何があっても init() メソッドが main() メソッドの前に実行されることがわかります。したがって、init() メソッドを使用してグローバル変数を初期化したり、他のパッケージの関数を呼び出したりすることができます。
2 番目の例:
package packageA import "fmt" func init() { fmt.Println("packageA中的init方法被调用") }
package packageB import ( "fmt" "packageA" ) func init() { fmt.Println("packageB中的init方法被调用") } func Test() { packageA.init() }
package main import ( "fmt" "packageB" ) func main() { fmt.Println("main方法被调用") packageB.Test() }
上記のプログラムを実行すると、次の出力が得られます:
packageA中的init方法被调用 packageB中的init方法被调用 main方法被调用 packageA中的init方法被调用
出力から、 packageB をインポートすると、最初に init が実行されることが明確にわかります。 packageA の () メソッドが実行され、次に packageB の init() メソッドが実行され、最後に main() メソッドが実行されます。 main() メソッド内で packageB の Test() メソッドを呼び出した場合、packageA の init() メソッドはすでに実行されているため、packageA の init() メソッドは再度呼び出されません。
つまり、init() 関数は非常に重要な役割を果たし、プログラムの実行に必要なコンポーネントの 1 つです。パッケージで init() 関数を定義するか、別のパッケージで init() 関数を呼び出すかにかかわらず、プログラム開発に Go 言語をより適切に使用するには、init() 関数の関連特性を理解する必要があります。
以上がgolang の初期化メソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。