Menu
Coddy logo textTech

エラーを返す関数

CoddyのGOジャーニー「基礎」セクションの一部 — レッスン 104/109。

Goでは、関数は通常、errorを最後の戻り値として返し、何らかの問題が発生したかどうかを示します。

結果とエラーの両方を返す関数を作成します:

func divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, errors.New("cannot divide by zero")
    }
    return a / b, nil
}

関数を呼び出し、エラーを処理します:

func main() {
    result, err := divide(10, 0)
    if err != nil {
        fmt.Println("Error:", err)
    } else {
        fmt.Println("Result:", result)
    }
}

出力は次のようになります:

Error: cannot divide by zero
challenge icon

チャレンジ

初心者

このチャレンジでは、無効な入力が提供されたときにエラーを返す関数の作成を練習します。

ユーザー名が有効かどうかをチェックする validateUsername 関数を完成させる必要があります。ユーザー名は、少なくとも3文字以上であれば有効です。ユーザー名が有効な場合は、エラーとして nil を返します。無効な場合は、適切なメッセージとともにエラーを返します。

関数を呼び出し、エラーを処理するコードはすでに作成されています。

注意: このチャレンジでは、ユーザー入力の代わりに定義済みの変数を使用します。

チートシート

Goの関数は通常、何らかの問題が発生したかどうかを示すために、最後の戻り値としてerrorを返します。

結果とエラーの両方を返す関数を作成します:

func divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, errors.New("cannot divide by zero")
    }
    return a / b, nil
}

関数を呼び出す際にエラーを処理します:

result, err := divide(10, 0)
if err != nil {
    fmt.Println("Error:", err)
} else {
    fmt.Println("Result:", result)
}

エラーがない場合はnilを返し、エラーメッセージを作成するにはerrors.New()を使用します。

自分で試してみよう

package main

import (
	"errors"
	"fmt"
)

func validateUsername(username string) error {
	// TODO: ユーザー名の長さが3文字未満かどうかを確認する
	// もしそうなら、"username too short" というメッセージとともにエラーを返す
	// そうでなければ、nil(エラーなし)を返す
	
	return nil
}

func main() {
	// 有効なユーザー名でテスト
	validName := "bob123"
	err1 := validateUsername(validName)
	if err1 != nil {
		fmt.Printf("%s is invalid: %v\n", validName, err1)
	} else {
		fmt.Printf("%s is valid!\n", validName)
	}
	
	// 無効なユーザー名でテスト
	invalidName := "ab"
	err2 := validateUsername(invalidName)
	if err2 != nil {
		fmt.Printf("%s is invalid: %v\n", invalidName, err2)
	} else {
		fmt.Printf("%s is valid!\n", invalidName)
	}
}
quiz icon腕試し

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

基礎のすべてのレッスン