エラー処理には golang のエラー ラップおよびアンワインド メカニズムを使用する

WBOY
リリース: 2024-04-25 08:15:02
オリジナル
873 人が閲覧しました

Go のエラー処理には、ラップ エラーとアンワインド エラーが含まれます。エラーをラップすると、あるエラー タイプを別のエラー タイプでラップできるようになり、エラーのより豊富なコンテキストが提供されます。エラーを展開し、ネストされたエラー チェーンをたどって、デバッグを容易にするために最下位レベルのエラーを見つけます。これら 2 つのテクノロジを組み合わせることで、エラー状態を効果的に処理でき、より豊富なエラー コンテキストと優れたデバッグ機能が提供されます。

エラー処理には golang のエラー ラップおよびアンワインド メカニズムを使用する

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!