首頁 >後端開發 >Golang >如何最好地處理 Go 中的錯誤?

如何最好地處理 Go 中的錯誤?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-27 10:06:10547瀏覽

How to Best Handle Errors in Go?

Go 中的標準錯誤變數

在 Golang 中,有多種處理錯誤的慣用方法。

自訂錯誤變數

作者常依照命名約定 Err... 來宣告固定錯誤變數。例如:

var (
        ErrSomethingBad = errors.New("some string")
        ErrKindFoo      = errors.New("foo happened")
)

錯誤類型

使用對呼叫者有用的特定資訊宣告錯誤類型(...Error)是另一種常見做法。

type SomeError struct {
     // extra information, whatever might be useful to callers
     // (or for making a nice message in `Error()`)
     ExtraInfo int
}
type OtherError string

func (e SomeError) Error() string { /* … */ }
func (e OtherError) Error() string {
        return fmt.Sprintf("failure doing something with %q", string(e))
}

臨時錯誤

如果您不希望使用者需要測試特定錯誤,您可以使用Errors.New建立臨時錯誤。

func SomepackageFunction() error {
        return errors.New("not implemented")
}

使用標準包錯誤

您可以利用標準包(如io.EOF)中定義的錯誤。但是,通常最好為自己的套件建立自訂錯誤。

func SomeFunc() error {
        return io.EOF
}

錯誤介面

建立錯誤介面可讓您檢查特定的行為或類型。

type Error interface {
    error
    Timeout() bool   // Is the error a timeout?
    Temporary() bool // Is the error temporary?
}

上下文錯誤

將此技術與 Go 1.13 或更高版本一起使用,為現有錯誤提供額外的上下文。

func SomepackageFunction() error {
    err := somethingThatCanFail()
    if err != nil {
            return fmt.Errorf("some context: %w", err)
    }
}

方法的選擇取決於您是否預期使用者需要測試特定錯誤以及多個使用者實現自己的錯誤處理的可能性。

以上是如何最好地處理 Go 中的錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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