Go Wiki: エラー

エラーは、関数の追加の戻り値としてerrorを返すことで示されます。nil値は、エラーが発生しなかったことを意味します。

errorは、唯一のメソッドであるErrorを呼び出すことで文字列に変換できます。文字列からエラーを作成するには、errors.Newを呼び出します。

if failure {
    return errors.New("inverse tachyon pulse failed")
}

またはfmt.Errorfを使用します。

if failure {
    return fmt.Errorf("inverse tachyon pulse failed")
}

エラー文字列は、大文字で始まるべきではありません。印刷前にプレフィックスが付けられることが多いためです。

err := TryInverseTachyonPulse()
if err != nil {
    fmt.Printf("failed to solve problem: %s\n", err)
}

呼び出し側のコードがエラーを処理できると予想される場合、特別な値または新しい型を返すことで、エラーの種類を区別できます。文字列によってエラーの詳細を伝えることができるため、このようにして呼び出し側のコードが処理できると期待できる違いのみを区別する必要があります。

io.EOFは、ストリームの終わりを示す特別な値です。エラー値をio.EOFと直接比較できます。

エラーに追加のデータを含めたい場合は、新しい型を使用できます。

type ParseError struct {
    Line, Col int
}

func (p ParseError) Error() string {
    return fmt.Sprintf("parse error on line %d, column %d", p.Line, p.Col)
}

定数の文字列エラーを作成する場合は、名前付き型文字列を使用できます。

type errorConst string

const ErrTooManyErrors errorConst = "too many errors found."

func (e errorConst) Error() string {
    return string(e)
}

呼び出し側のコードは、型スイッチを使用して特別な型のerrorをテストします。

switch err := err.(type) {
case ParseError:
    PrintParseError(err)
}

命名

エラー型は"Error"で終わり、エラー変数は"Err"または"err"で始まります。

package somepkg

// ParseError is type of error returned when there's a parsing problem.
type ParseError struct {
  Line, Col int
}

var ErrBadAction = errors.New("somepkg: a bad action was performed")

// -----

package foo

func foo() {
    res, err := somepkgAction()
    if err != nil {
        if err == somepkg.ErrBadAction {
        }
        if pe, ok := err.(*somepkg.ParseError); ok {
             line, col := pe.Line, pe.Col
             // ....
        }
    }
}

参照


このコンテンツはGo Wikiの一部です。