首頁  >  文章  >  後端開發  >  如何在 Go 中具體捕捉「連線遺失」或「連線拒絕」錯誤?

如何在 Go 中具體捕捉「連線遺失」或「連線拒絕」錯誤?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-06 13:57:03992瀏覽

How Can I Specifically Catch

在 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
}

閱讀錯誤文件

了解所有可能的情況函數傳回的錯誤,可以查閱文件。例如,rpc.Dial 的 godoc 提供了有關它可以返回的不同錯誤的詳細資訊。

Legacy Approach

作為最後的手段,您可以比較錯誤字串預期錯誤:

if strings.Contains(err.Error(), "connection lost") {
  // Handle connection lost error
}

但是,不建議使用這種方法,因為它容易出現誤報或底片。

以上是如何在 Go 中具體捕捉「連線遺失」或「連線拒絕」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn