在 Go 語(yǔ)言(Golang)中,錯(cuò)誤處理是一個(gè)非常重要的概念。Go 通過(guò)返回值來(lái)報(bào)告錯(cuò)誤,這意呀著函數(shù)可以返回多個(gè)值,其中一個(gè)值用于表示操作是否成功執(zhí)行,而另一個(gè)(或多個(gè))值則用于在出錯(cuò)時(shí)提供錯(cuò)誤信息。
error
類型的值,用于指示是否發(fā)生了錯(cuò)誤。調(diào)用者應(yīng)該檢查這個(gè)返回值以確定是否發(fā)生了錯(cuò)誤。 func someFunction() (result int, err error) {
// ... 函數(shù)邏輯
if someCondition {
return 0, errors.New("some error occurred")
}
return 1, nil
}
result, err := someFunction()
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Result:", result)
error
接口(即包含一個(gè) Error()
方法)來(lái)自定義錯(cuò)誤。 type MyError struct {
Code int
Message string
}
func (e *MyError) Error() string {
return fmt.Sprintf("error code %d: %s", e.Code, e.Message)
}
func someFunction() (*MyError, int) {
// ... 函數(shù)邏輯
if someCondition {
return &MyError{Code: 1, Message: "some specific error"}, 0
}
return nil, 1
}
err, result := someFunction()
if err != nil {
fmt.Println(err)
return
}
fmt.Println("Result:", result)
使用 errors
包:
Go 標(biāo)準(zhǔn)庫(kù)中的 errors
包提供了創(chuàng)建和處理錯(cuò)誤的實(shí)用功能,比如 errors.New()
用于創(chuàng)建一個(gè)簡(jiǎn)單的錯(cuò)誤值。
錯(cuò)誤包裝:
Go 1.13 引入了錯(cuò)誤包裝(Error Wrapping)功能,允許你將一個(gè)錯(cuò)誤包裝在另一個(gè)錯(cuò)誤內(nèi)部,這有助于錯(cuò)誤溯源和提供更多的上下文信息。%w
動(dòng)詞用于 fmt.Errorf
來(lái)包裝錯(cuò)誤。
func wrapError(err error) error {
return fmt.Errorf("wrapped: %w", err)
}
err := errors.New("original error")
wrappedErr := wrapError(err)
fmt.Println(wrappedErr)
// 使用 errors.Is 或 errors.As 來(lái)檢查和提取原始錯(cuò)誤
errors.Is
和 errors.As
函數(shù)可以用來(lái)檢查錯(cuò)誤鏈中的特定錯(cuò)誤。errors
包提供的函數(shù)和類型來(lái)處理錯(cuò)誤。通過(guò)遵循這些最佳實(shí)踐,你可以編寫出更健壯、更易于維護(hù)和調(diào)試的 Go 程序。
上一篇: Golang 語(yǔ)言接口
下一篇: Golang 并發(fā)