KDOC 53: Goで独自定義のエラーをconstにする

Goではプログラマを縛る方法が少なく、開発者を信用し性善説で行く方針になっている。

constの制約が大きく、例えば独自定義のエラーを定義するとき、以下のように書けない。

const errNotFound = errors.New("not found")

いっぽうvarで定義すると簡単にできる。

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

しかしvarなので、書き換えができてしまう。これを、書き換えられないようにするには、というのが本題である。以下のようにする。

// プリミティブ型の定義型を作る
type errNotFound int
// メソッドを定義してerrorインターフェースを満たす
func (e errNotFound) Error() string {
        return "not found error"
}
// インスタンス(プリミティブ型)をconstにする
const (
  ErrNotFound errNotFound = 0
)

関連。