Go のエラー処理には、ラップ エラーとアンワインド エラーが含まれます。エラーをラップすると、あるエラー タイプを別のエラー タイプでラップできるようになり、エラーのより豊富なコンテキストが提供されます。エラーを展開し、ネストされたエラー チェーンをたどって、デバッグを容易にするために最下位レベルのエラーを見つけます。これら 2 つのテクノロジを組み合わせることで、エラー状態を効果的に処理でき、より豊富なエラー コンテキストと優れたデバッグ機能が提供されます。
Go のエラー ラップと巻き戻しメカニズムをエラー処理に使用する
Go では、エラー処理が重要です。プログラムの実行中に発生するエラー状態。ラッピング エラーとアンラッピング エラーは、Go でのエラー処理の 2 つの一般的な手法であり、エラー処理をより細かく制御できます。
エラーのラッピング
エラー ラッピングを使用すると、あるエラー タイプを別のエラー タイプでラップできるため、より豊富なコンテキストを持つエラーを作成できます。これにより、エラーのソースと原因に関する追加情報が提供され、より堅牢なエラー処理が容易になります。
import ( "errors" "fmt" ) type DBError struct { error } func (e *DBError) Unwrap() error { return e.error } func main() { // 原始数据库错误 origErr := errors.New("database connection failed") // 包装数据库错误 wrappedErr := &DBError{ error: fmt.Errorf("failed to connect to database: %w", origErr), } // 处理包装后的错误 switch { case errors.Is(wrappedErr, errors.New("database connection failed")): fmt.Println("Database connection failed.") } }
上記の例では、DBError
型は元のデータベース エラー (origErr
) をラップし、追加のコンテキスト情報を提供します。fmt.Errorf
を使用してラップされたエラーを作成し、errors.Is
関数を使用してラップされたエラーが元のデータベース エラーと一致するかどうかを比較します。
展開エラー
展開エラーは、最も低いレベルのエラーが見つかるまで、ネストされたエラーのチェーンをたどるメカニズムです。これは、デバッグの目的だけでなく、エラーの根本原因を理解するのにも役立ちます。
import ( "fmt" ) func f1(s string) error { if s == "" { return errors.New("empty string") } return nil } func f2(s string) error { if err := f1(s); err != nil { return fmt.Errorf("f1() failed: %w", err) } return nil } func main() { // 嵌套错误 err := f2("") for { // 检查错误是否为 nil if err == nil { break } // 展开错误 fmt.Println(err) err = errors.Unwrap(err) } }
上の例では、f2
関数はf1
関数のエラーをラップします。errors.Unwrap
関数は、ネストされたエラーのラップを解除するために使用され、エラー チェーンを反復処理して各エラーを出力できるようになります。
ラッピング エラーとアンラッピング エラーを組み合わせて使用することで、Go プログラムのエラー状態を効果的に処理し、より豊富なエラー コンテキストと優れたデバッグ機能を提供できます。
以上がエラー処理には golang のエラー ラップおよびアンワインド メカニズムを使用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。