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
// ....
}
}
}
参照
- エラー(仕様):https://go.dokyumento.jp/ref/spec#Errors
- パッケージ
errors
:https://pkg.go.dev/errors/ - 型スイッチ:https://go.dokyumento.jp/ref/spec#TypeSwitchStmt
このコンテンツはGo Wikiの一部です。