Go での特定のエラーの捕捉
Go は柔軟なエラー処理を提供し、開発者がコード内の特定のエラー タイプに対処できるようにします。 rpc.Dial 関数を使用していて、「接続が失われました」または「接続が拒否されました」エラーのみを処理したいとします。
errors.Is とerrors.As
最新の Go バージョンでは、効率的なエラー処理のために、errors.Is 関数とerrors.As 関数が提供されています。あなたの場合:
if errors.Is(err, syscall.ECONNREFUSED) { // Handle connection refused error } else if errors.As(err, &net.OpError{}) { // Handle other network errors (e.g., connection lost) }
エラーの種類の確認
別の方法は、エラーの種類を直接確認することです。質問で述べたように、net パッケージはネットワーク エラーの net.Error を含むさまざまなエラー タイプを定義しています。
if _, ok := err.(net.Error); ok { // Handle net.Error instance }
Reading Error Documentation
考えられるすべてのことを理解するには関数によって返されたエラーについては、ドキュメントを参照してください。たとえば、rpc.Dial の godoc は、返される可能性のあるさまざまなエラーの詳細を提供します。
従来のアプローチ
最後の手段として、エラー文字列を比較できます。予想されるエラー:
if strings.Contains(err.Error(), "connection lost") { // Handle connection lost error }
ただし、このアプローチは偽陽性または偽陰性が発生する傾向があるため、お勧めできません。
以上がGo で「接続が失われました」または「接続が拒否されました」エラーを具体的に検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。