[Golang] エラー取り扱いまとめ

golang Golang

Go言語でのエラーの扱い方

基本方針

例外が起きる可能性のある関数はすべてerrorを返すようにする

go言語は複数の値を返すことができるので、エラーが起きる可能性のある関数については常にエラーをリターン値の末尾に含めるようにします

エラーの判別

go1.13以降ではerror.Isなどを用いてエラーを判別できるようになっているようです。

import (
    "errors"
    "fmt"
)

var ErrNotFound = errors.New("not found")

func getItem(id int) (string, error) {
    if id == 0 {
        return "", fmt.Errorf("failed to get item: %w", ErrNotFound)
    }
    return "item", nil
}

func main() {
    _, err := getItem(0)
    if errors.Is(err, ErrNotFound) {
        fmt.Println("Item not found")
    }
}

エラーのraise方法

静的なエラーの場合

errors.Newで生成

import "errors"

var ErrNotFound = errors.New("not found")

func getItem(id int) (string, error) {
    if id == 0 {
        return "", ErrNotFound
    }
    return "item", nil
}

動的なエラーの場合

変数の内容などをエラーに含める場合はfmt.Errorfで生成

import "fmt"

func getItem(id int) (string, error) {
    if id == 0 {
        return "", fmt.Errorf("item with id %d not found", id)
    }
    return "item", nil
}

参考文献

コメント

タイトルとURLをコピーしました