golang エラーハンドリング/例外処理の書き方と注意点
今回はGo言語のエラーハンドリング/例外処理について解説していきます。
エラーハンドリング/例外処理
Go言語では、try/catchなどのような一般的なプログラミング言語の「例外処理」は提供されていません。
代わりにエラーを値として返すアプローチが採用されています。
この方法によりエラーハンドリングがプログラムのロジックの一部として明示的に扱われます。
エラーハンドリングの書き方
エラーを返す関数の定義:
Goでは、関数がエラーを返す可能性がある場合、戻り値の最後にerror型でエラーを返します。
import "errors"
func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}
エラーチェックの実施
関数を呼び出した後、エラーが返されたかどうかをチェックします。エラーがある場合は、それに適切に対応します。
result, err := divide(10, 0)
if err != nil {
fmt.Println("Failed:", err)
return
}
fmt.Println("Result:", result)
golangの案件を探すならクラウドワークス テック
注意点
エラーを無視しない
Goではエラーを返す設計が一般的ですが、これを無視すると予期せぬバグやランタイムパニックの原因となります。必ずエラーチェックを行い、適切な対応をしてください。
result, _ := divide(10, 0)
fmt.Println("Result:", result) // この行でパニックが発生する可能性がある
エラー処理の戦略を考える
エラーが発生した場合の処理を戦略的に考える必要があります。
例えば、リトライ処理、ログ記録、プログラムの安全な終了など、エラーに応じた適切な対応をプログラム内で定義することが重要です。
カスタムエラーの使用
errors.New()やfmt.Errorf()を使って簡単にエラーを生成できますが、より複雑なエラーハンドリングを行う場合は、カスタムエラータイプを定義すると良いでしょう。
type MyError struct {
Code int
Message string
}
func (e *MyError) Error() string {
return fmt.Sprintf("Code %d: %s", e.Code, e.Message)
}
func doSomething() error {
return &MyError{Code: 404, Message: "Not Found"}
}
パニックの適切な使用
パニックは回復不可能なエラーやプログラマの誤りを示すために保留されています。
通常のエラーハンドリングではパニックを使用せ、error型を返して処理することが推奨されます。
パニックから回復するためにrecoverを使用する場合は、それが本当に必要かどうか慎重に判断する必要があります。
golangをもっと詳しくなりたい方に
初めてのGo言語
Go言語の入門から応用まではこの一冊で網羅されています。説明も順序立てて説明されており完成度の高い参考書となっています。
詳解Go言語Webアプリケーション開発
こちらはGo言語の基礎知識を得たあとに読むことをすすめる本となっています。ハンズオン形式で手を動かしながら実装をしていくことができるため、実際の開発を意識しながらGo言語を学ぶことができます。
以下の記事では他にも筆者が実際に読んでおすすめしたい本をまとめています。
【Go入門】Golang基礎入門 + 各種ライブラリ + 簡単なTodoWebアプリケーション開発(Go言語)
まだGo言語の勉強を始めていない方、全くの初心者の方にはこちらのUdemy教材が最もおすすめです。
この教材ではgolangの基礎について網羅的に学ぶことができます。ただ見て学ぶだけでなく、講座の中でアプリ作成まで行うことで学んだことの理解をさらに深めることができます。
現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発
個人的に最も勉強になったのは「現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発」という教材です。
本格的なレクチャーに入る前に、なぜGoなのか、なぜFintechなのかについて説明されていることで、Goの概念や意味について大枠から理解することができます。
以下の記事では筆者が実際に受講したおすすめUdemy教材をまとめています。
この記事が参加している募集
この記事が気に入ったらサポートをしてみませんか?