Go でのエラー処理: 標準的および慣用的なアプローチ
Golang では、エラーの発生を示すためにエラー変数の使用を推奨しています。ただし、事前定義された標準エラー変数のセットはありません。代わりに、開発者はエラーの定義と処理に慣用的な方法を採用することをお勧めします。
固定エラー変数
パッケージでは、次で始まる名前の固定エラー変数を定義するのが一般的です。接頭辞「エラー」。これらの変数は通常、特定のエラー状態を表すために使用され、エラー チェックが容易になります。例:
var ( ErrSomethingBad = errors.New("some string") ErrKindFoo = errors.New("foo happened") )
エラー タイプ
もう 1 つの慣用的なアプローチは、エラー インターフェイスを実装する構造体を作成してカスタム エラー タイプを定義することです。これらのエラー タイプには、エラーに関連する追加情報を含めることができるため、特定のタイプのエラーを確認するのに便利です。
type SomeError struct { ExtraInfo int } type OtherError string func (e SomeError) Error() string { /* … */ } func (e OtherError) Error() string { return fmt.Sprintf("failure doing something with %q", string(e)) }
アドホック エラー値
状況特定のエラー状態が予想されない場合は、errors.New() 関数を使用して新しいエラー値をその場で作成できます。このメソッドは、カスタム エラー メッセージとともにエラー値を返します。
func SomepackageFunction() error { return errors.New("not implemented") }
標準エラーの使用
Go は、パッケージで定義された限定された標準エラーのセットを提供します。これらのエラーは、インターフェイスを実装するとき、または特定の標準に準拠するときによく使用されます。ただし、一般的には、パッケージ内のより具体的なエラー条件に対してカスタム エラーを定義することをお勧めします。
func SomeFunc() error { return io.EOF }
エラー インターフェイス
Go では、エラー インターフェイスの作成も可能です。一般的なエラー動作を定義します。これらのインターフェイスを使用すると、特定のプロパティのエラーをチェックできます。
type Error interface { error Timeout() bool // Is the error a timeout? Temporary() bool // Is the error temporary? }
Go 1.13 でのエラー ラップ
Go 1.13 以降、既存のエラーをコンテキストでラップできるようになりました。または追加情報。これにより、広範なカスタム エラー タイプを必要とせずに、より多くのコンテキストがユーザーに提供されるため、エラー処理が簡素化されます。
func SomepackageFunction() error { err := somethingThatCanFail() if err != nil { return fmt.Errorf("some context: %w", err) } }
これらの慣用的な慣例に従うことで、開発者は Go コード内のエラーを効果的に処理でき、明確で管理可能なエラー処理が保証されます。メカニズム。
以上が慣用的な Go プラクティスはエラー処理にどのように対処しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。