Menu
Coddy logo textTech

基本的なエラーハンドリング

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では非常によく見られるものです。これにより、プログラムをクラッシュさせるのではなく、失敗を適切に処理できるようになります。

challenge icon

チャレンジ

簡単

このチャレンジでは、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)
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン