5.1 エラーの書き方

Goのエラーが error インタフェースを満たす値だということは説明しました。アプリケーションでエラーを生成する方法は大きく2つあります。1つは標準ライブラリの関数を使って生成する方法、もう1つはアプリケーション独自のエラー型を定義する方法です。

5.1.1 errors.New

もっともシンプルにエラーを生成する方法が errors.New() を使ってエラーを宣言する方法です。シンプルにエラーだと呼び出し元へ伝えたいときに errors.New() が役に立つでしょう。また、ライブラリを作成する場合などは ErrNotFound というような名前の変数としてエラーを公開しておくと、呼び出し元のプログラムが呼び出し先のライブラリ側で発生したエラーを区別してハンドリングできます。

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

func findBook(isbn string) (*Book, error) {
	// ...
	// 値が取得できなかったため ErrNotFound を返す
	return nil, ErrNotFound
}

io パッケージの io.EOF も以下のように errors.New() を使ってエラーを宣言しています。

var EOF = errors.New("EOF")

5.1.2 fmt.Errorf

fmt.Errorf() を使ってフォーマットされた文字列を元にエラーを生成できます。フォーマットを使ったエラーの生成は以下のようになります。

func validate(length int) error {
	if length <= 0 {
		return