ホームページ  >  記事  >  バックエンド開発  >  Go で `err.(*os.PathError)` を使用するタイミングと理由

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

Barbara Streisand
Barbara Streisandオリジナル
2024-11-04 10:03:02565ブラウズ

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。