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
}
コメント