基本的なエラーハンドリング
CoddyのGOジャーニー「基礎」セクションの一部 — レッスン 108/109。
基本的なエラーハンドリングは、失敗する可能性のある操作の後にエラーをチェックするという、Goにおける基本的なパターンです。
Goでエラーを処理する方法を学ぶために、ゼロで除算したときにエラーを返す簡単な除算関数を作成してみましょう:
func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}この関数は、除算の結果とエラーの2つの値を返します。除数がゼロの場合、除算を試みる代わりにエラーメッセージを返します。
それでは、この関数の使い方と、発生する可能性のあるエラーの処理方法を見てみましょう。
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error occurred:", err)
return // 実行を停止するか、エラーを処理します
}
fmt.Println("Result:", result)このコードを実行した後、if err != nil 条件を使用してエラーが発生したかどうかを確認します。ゼロ除算を試みたため、関数はエラーを返し、画面には以下が表示されます:
Error occurred: division by zeroエラーを最後の戻り値として返し、すぐにそれをチェックするというこのパターンは、Goでは非常によく見られるものです。これにより、プログラムをクラッシュさせるのではなく、失敗を適切に処理できるようになります。
チャレンジ
簡単このチャレンジでは、Goにおける基本的なエラーハンドリングを練習します。2つの数値を割る関数がありますが、ゼロ除算はランタイムエラーを引き起こします。あなたのタスクは、このクラッシュを防ぐためにエラーハンドリングを追加することです。
コードには、結果とエラーの両方を返す関数が既に用意されています。結果を使用する前に、エラーがあるかどうかを確認する必要があります。
チートシート
Goでは、失敗する可能性のある関数は、最後の戻り値としてエラーを返します:
func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}if err != nil を使用してエラーをチェックします:
result, err := divide(10, 0)
if err != nil {
fmt.Println("Error occurred:", err)
return // Stop execution or handle the error
}
fmt.Println("Result:", result)このパターンにより、プログラムはクラッシュする代わりに、失敗を適切に処理できるようになります。
自分で試してみよう
package main
import (
"errors"
"fmt"
)
// この関数はxをyで割り、yがゼロの場合はエラーを返します
func divide(x, y float64) (float64, error) {
if y == 0 {
return 0, errors.New("cannot divide by zero")
}
return x / y, nil
}
func main() {
// テスト値
numerator := 10.0
denominator := 0.0
// divide関数を呼び出す
result, err := divide(numerator, denominator)
// TODO: errがnilでない(エラーが発生している)か確認する
// エラーがある場合は、fmt.Println(err)を使用して出力する
// そうでない場合は、fmt.Printf("Result: %.2f\n", result)を使用して結果を出力する
// この行を削除し、上記の適切なエラーハンドリングを実装してください
fmt.Printf("Result: %.2f\n", result)
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
11複合型:スライス
スライス入門スライスリテラルの宣言`make` によるスライスの作成スライスの長さと容量スライス要素へのアクセス要素の追加既存のスライス/配列のスライススライスの反復処理スライスのコピーまとめ:動的リスト14エラーハンドリングの基本
エラーの概念`error` インターフェースエラーを返す関数エラーのチェックシンプルなエラーの作成フォーマット済みエラーの作成基本的なエラーハンドリングまとめ:問題への対処