Go で `err.(*os.PathError)` を使用するタイミングと理由

Barbara Streisand
リリース: 2024-11-04 10:03:02
オリジナル
564 人が閲覧しました

When and Why Use `err.(*os.PathError)` in Go?

Go の err.(*os.PathError) について

効果的なエラー処理に関する Go のドキュメント (https://golang.org/doc/effective_go.html) #errors) を参照した場合、次のコード スニペットに遭遇したことがあるかもしれません:

<code class="go">for try := 0; try < 2; try++ {
    file, err = os.Create(filename)
    if err == nil {
        return
    }
    if e, ok := err.(*os.PathError); ok && e.Err == syscall.ENOSPC {
        deleteTempFiles()  // Recover some space.
        continue
    }
    return
}</code>
ログイン後にコピー

このコードは、err.(*os.PathError) の使用法を示しています。これが何を意味するのか詳しく見てみましょう。

err.(*os.PathError) とは何ですか?

os.Create が呼び出されると、2 番目の戻り値としてエラーが返されます。このエラーは、エラー インターフェイス { Error() string } を実装します。 Error メソッドを持つ任意のデータ型は、このインターフェイスを実装して割り当てることができます。

通常、エラー メッセージを出力するだけで十分です。ただし、この例では、プログラムは ENOSPC (デバイスに空き領域がありません) エラーを特別に処理することを目的としています。 os パッケージは、そのような場合のエラー実装として *os.PathError を提供します。エラーに関する詳細情報にアクセスする必要がある場合は、それをキャストできます。

Type Assertion: e, ok := err.(*os.PathError)

ステートメント e, ok : = err.(os.PathError) は型アサーションを使用します。インターフェイス値 err が具体的な型として os.PathError を保持しているかどうかを検証し、保持している場合はその値を返します。インターフェースに別の型が存在する場合 (他の型もエラー インターフェースを実装している可能性があります)、単純にゼロ値と false (この場合は nil、false) を返します。

以上がGo で `err.(*os.PathError)` を使用するタイミングと理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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