![見出し画像](https://assets.st-note.com/production/uploads/images/137255874/rectangle_large_type_2_41e85b7d460867230502e0fcc9ef8d64.png?width=1200)
golang panicの使い方と注意点について
Go言語においてpanicはプログラムの実行中に致命的な問題が発生したときに呼び出される関数です。
panicは通常、回復不能なエラーが発生した場合に使用され、実行を安全に停止させるために機能します。
panicの使い方
panic関数は、任意の型の一つの引数を取ります。
この引数はエラーメッセージやオブジェクトなど何でもよく、panic発生時にプログラムによって報告されます。
func checkPositive(x int) {
if x < 0 {
panic("x is not positive")
}
}
func main() {
checkPositive(-1)
}
checkPositive関数は引数が負の数である場合にpanicを呼び出します。
このpanicは引数が負の数であることを示すエラーメッセージを含んでいます。
panicの注意点
使用の制限
panicは極めて重大なエラーの場合にのみ使用するのが一般的です。
ファイルが見つからない、ネットワークが一時的に利用不可、入力データのフォーマットが不正など、回復可能なエラーはerror型を返して処理するのが一般的です。
エラーハンドリングとの違い
Goは例外を使用しません。
代わりにエラー値を返してそれをチェックするパターンを推奨しています。panicはそのパターンから外れ、コントロールフローを中断します。したがって、正常なエラーハンドリングの代わりにpanicを使用することは避けるべきです。
recoverの使用
panicによってプログラムが終了するのを防ぐために、recoverを使用してpanicを「キャッチ」することができます。
recoverはdefer関数内でのみ有効ですが、recoverの使用はプログラムの正常なエラーフローを曖昧にするため、必要最小限に留めるべきです。
func riskyFunction() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered from panic:", r)
}
}()
// 何かパニックを引き起こす可能性のある処理
panic("something went wrong")
}
func main() {
riskyFunction()
fmt.Println("Program continues...")
}
golangをもっと詳しくなりたい方に
初めてのGo言語
![](https://assets.st-note.com/img/1713080412998-qjStPNqCuf.png?width=1200)
Go言語の入門から応用まではこの一冊で網羅されています。説明も順序立てて説明されており完成度の高い参考書となっています。
詳解Go言語Webアプリケーション開発
![](https://assets.st-note.com/img/1713080413038-sNdlot1nRi.png?width=1200)
こちらはGo言語の基礎知識を得たあとに読むことをすすめる本となっています。ハンズオン形式で手を動かしながら実装をしていくことができるため、実際の開発を意識しながらGo言語を学ぶことができます。
以下の記事では他にも筆者が実際に読んでおすすめしたい本をまとめています。
【Go入門】Golang基礎入門 + 各種ライブラリ + 簡単なTodoWebアプリケーション開発(Go言語)
まだGo言語の勉強を始めていない方、全くの初心者の方にはこちらのUdemy教材が最もおすすめです。
この教材ではgolangの基礎について網羅的に学ぶことができます。ただ見て学ぶだけでなく、講座の中でアプリ作成まで行うことで学んだことの理解をさらに深めることができます。
現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発
個人的に最も勉強になったのは「現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発」という教材です。
本格的なレクチャーに入る前に、なぜGoなのか、なぜFintechなのかについて説明されていることで、Goの概念や意味について大枠から理解することができます。
以下の記事では筆者が実際に受講したおすすめUdemy教材をまとめています。
※本ページではアフィリエイトリンク(PR)が含まれています
この記事が参加している募集
この記事が気に入ったらサポートをしてみませんか?