効果的なエラー処理に関する 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) の使用法を示しています。これが何を意味するのか詳しく見てみましょう。
os.Create が呼び出されると、2 番目の戻り値としてエラーが返されます。このエラーは、エラー インターフェイス { Error() string } を実装します。 Error メソッドを持つ任意のデータ型は、このインターフェイスを実装して割り当てることができます。
通常、エラー メッセージを出力するだけで十分です。ただし、この例では、プログラムは ENOSPC (デバイスに空き領域がありません) エラーを特別に処理することを目的としています。 os パッケージは、そのような場合のエラー実装として *os.PathError を提供します。エラーに関する詳細情報にアクセスする必要がある場合は、それをキャストできます。
ステートメント e, ok : = err.(os.PathError) は型アサーションを使用します。インターフェイス値 err が具体的な型として os.PathError を保持しているかどうかを検証し、保持している場合はその値を返します。インターフェースに別の型が存在する場合 (他の型もエラー インターフェースを実装している可能性があります)、単純にゼロ値と false (この場合は nil、false) を返します。
以上がGo で `err.(*os.PathError)` を使用するタイミングと理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。