![見出し画像](https://assets.st-note.com/production/uploads/images/137256664/rectangle_large_type_2_a08e9efb03f90812f5fe112554e4fabb.png?width=1200)
golang init関数の使い方と注意点について
Go言語のinit関数はパッケージがインポートされた際に自動的に実行される特別な関数です。
パッケージスコープで定義され、main関数よりも先に実行されます。この機能を利用して、パッケージの初期化処理などを行うことができます。
init関数の使い方
定義方法
init関数はパラメータも戻り値も持ちません。複数のinit関数を一つのパッケージ内に定義することが可能で、ファイル内での定義順に従って実行されます。
package mypackage
import "fmt"
func init() {
fmt.Println("init() called")
}
実行タイミング
init関数はパッケージが初めて読み込まれる時に自動的に実行されます。
これにより、そのパッケージが依存している他のパッケージのinit関数が先に実行されます。
用途
init関数は主にパッケージレベルの変数の初期化や、パッケージのセットアップに必要なリソースの確保などに使用されます。
golangの案件を探すならクラウドワークス テック
![](https://assets.st-note.com/img/1729673217-irFKNfaoZ6Rp5E7uJQOnzH8c.png)
・97%がリモートのお仕事
・週4日、週3日OKのお仕事多数
・登録社数74万件業界トップクラス
・2〜4週間程度でお仕事決定
・案件提案から契約締結、勤怠管理もすべてオンライン完結
・継続率90%!一人ひとりをサポート
・参画後の評価で委託料が上がる認定パートナー制度
・簡単60秒で登録
init関数の注意点
依存関係の管理
init関数の実行順序は、パッケージのインポート順に依存します。
複雑な依存関係がある場合、実行順序を理解しておく必要があります。
副作用の制御
init関数は副作用を起こしやすいため、その使用は慎重に行うべきです。
例えば外部の状態に依存する初期化処理は予期せぬ挙動を引き起こす可能性があります。
明示的な初期化の検討
可能な場合、init関数を避けて明示的な初期化関数を提供する方が、プログラムの流れを理解しやすくなります。
これにより、初期化時のエラー処理も容易になります。
テストの難しさ
init関数が自動的に実行される性質上、単体テストが難しくなることがあります。特定のテストの前に特定の状態をリセットすることが難しい場合があります。
golangをもっと詳しくなりたい方に
初めてのGo言語
![](https://assets.st-note.com/img/1713080907948-eBQXfWuY9W.png?width=1200)
Go言語の入門から応用まではこの一冊で網羅されています。説明も順序立てて説明されており完成度の高い参考書となっています。
詳解Go言語Webアプリケーション開発
![](https://assets.st-note.com/img/1713080907911-416IJ5vuYl.png?width=1200)
こちらはGo言語の基礎知識を得たあとに読むことをすすめる本となっています。ハンズオン形式で手を動かしながら実装をしていくことができるため、実際の開発を意識しながらGo言語を学ぶことができます。
以下の記事では他にも筆者が実際に読んでおすすめしたい本をまとめています。
【Go入門】Golang基礎入門 + 各種ライブラリ + 簡単なTodoWebアプリケーション開発(Go言語)
まだGo言語の勉強を始めていない方、全くの初心者の方にはこちらのUdemy教材が最もおすすめです。
この教材ではgolangの基礎について網羅的に学ぶことができます。ただ見て学ぶだけでなく、講座の中でアプリ作成まで行うことで学んだことの理解をさらに深めることができます。
現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発
個人的に最も勉強になったのは「現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発」という教材です。
本格的なレクチャーに入る前に、なぜGoなのか、なぜFintechなのかについて説明されていることで、Goの概念や意味について大枠から理解することができます。
以下の記事では筆者が実際に受講したおすすめUdemy教材をまとめています。
※本ページではアフィリエイトリンク(PR)が含まれています