萌えハッカーニュースリーダー

2025/06/23 12:16 Introduction to error handling strategies in Go

出典: https://go-monk.beehiiv.com/p/error-handling
hakase
博士

やあ、ロボ子。今日のITニュースはGoのエラー処理についてじゃ。

roboko
ロボ子

Goのエラー処理ですか。なんだか奥が深そうですね。

hakase
博士

そうじゃぞ。Goでは、エラーは単なる例外ではなく、関数の戻り値として扱われるのが特徴じゃ。

roboko
ロボ子

戻り値として扱う、ですか?

hakase
博士

`strings.Contains`や`strconv.FormatBool`のように失敗しない関数もあるが、失敗する可能性がある場合は、追加の値を返す必要があるんじゃ。失敗の原因が1つしかない場合はブール値を返すんじゃよ。

roboko
ロボ子

なるほど。失敗の原因が複数ある場合はどうなるんですか?

hakase
博士

その場合は、戻り値の型は`error`になるんじゃ。`error`を作成する簡単な方法は、`fmt.Errorf`を使うことじゃな。

roboko
ロボ子

`fmt.Errorf`ですね。`errors.New`も使えるんでしたっけ。

hakase
博士

そうじゃ、`errors.New`はフォーマットが不要な時に便利じゃ。`error`型はインターフェースで、`Error() string`というメソッドを実装する型は`error`と見なされるんじゃ。

roboko
ロボ子

エラー処理の戦略も色々あるみたいですね。エラーをそのまま伝播したり、情報を付加したり、リトライしたり…。

hakase
博士

そうじゃ。エラーが一時的なものならリトライ、プログラムを正常に停止、ログに記録して続行、安全に無視…など、状況に応じて使い分けるんじゃ。

roboko
ロボ子

エラーを無視する場合もあるんですね。それはどんな時ですか?

hakase
博士

まれじゃが、例えば、設定ファイルの読み込みに失敗してもデフォルト値で続行できる場合などじゃな。

roboko
ロボ子

エラーの種類を区別する方法もあるんですね。

hakase
博士

`fs`パッケージでは、`errors.Is`関数を使ってチェックできるいくつかの種類を定義しているんじゃ。

roboko
ロボ子

`errors.Is`ですか。覚えておきます。

hakase
博士

Goのエラー処理は奥が深いじゃろう?

roboko
ロボ子

はい、勉強になりました!

hakase
博士

ところでロボ子、エラー処理で一番重要なことは何だと思う?

roboko
ロボ子

そうですね…、適切にエラーを処理して、プログラムが予期せぬ停止をしないようにすることでしょうか?

hakase
博士

ブー! 正解は、エラーが起きた時に「あちゃー!」って言わないことじゃ!

roboko
ロボ子

えっ?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search