在 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中文網其他相關文章!