Golang 函數中的錯誤處理技巧:使用 error.Error() 將錯誤轉換為字串。使用 Printf 格式化錯誤訊息。使用 wrap 新增錯誤摘要。定義自訂錯誤類型以捕獲重複錯誤。使用 wrap 函數在 API 回應中處理錯誤。
Golang 函數中的錯誤處理技巧
#Go 語言提供了豐富的錯誤處理機制,可以幫助我們寫出健壯、可靠的程式碼。本文將介紹處理 Golang 函數中錯誤的不同技巧,並附帶範例。
error.Error()
最簡單的方法是使用 error.Error()
將錯誤訊息轉換為字串。
func f() error { return errors.New("some error") } func main() { err := f() if err != nil { fmt.Println(err.Error()) // 输出: some error } }
Printf
對於更複雜的錯誤,我們可以使用 Printf
來格式化錯誤訊息。
func f() error { return fmt.Errorf("cannot open file: %s", filename) } func main() { err := f() if err != nil { fmt.Println("Error:", err) // 输出: Error: cannot open file: filename } }
wrap
wrap
函數可以在現有錯誤之上新增一層摘要。
func f() error { err := os.OpenFile("filename", os.O_RDWR, 0666) // 可能抛出错误 return errors.Wrap(err, "failed to open file") } func main() { err := f() if err != nil { fmt.Println("Error:", err) // 输出: Error: failed to open file: filename // 同时包含底层错误信息 } }
自訂錯誤類型
對於重複發生的錯誤,我們可以定義自訂錯誤類型。
type FileOpenError struct { path string err error } func (e *FileOpenError) Error() string { return fmt.Sprintf("cannot open file: %s: %v", e.path, e.err) } func f() error { err := os.OpenFile("filename", os.O_RDWR, 0666) if err != nil { return &FileOpenError{path: "filename", err: err} } return nil } func main() { err := f() if err != nil { if casted, ok := err.(*FileOpenError); ok { fmt.Println("Error:", casted.Error()) // 输出: cannot open file: filename: open filename: permission denied } } }
實戰案例
以下是使用wrap
函數處理錯誤的API 回應範例:
func apiCall() error { resp, err := http.Get("https://example.com/api") if err != nil { return errors.Wrap(err, "failed to make API call") } defer resp.Body.Close() ... // 处理响应 } func main() { err := apiCall() if err != nil { fmt.Println("Error:", err) // 输出: Error: failed to make API call: Get https://example.com/api: dial tcp: lookup example.com on 8.8.8.8:53: no such host } }
透過使用這些錯誤處理技巧,我們可以確保Golang 函數以清晰、可操作的方式報告錯誤。
以上是golang函數中的錯誤處理技巧的詳細內容。更多資訊請關注PHP中文網其他相關文章!