Rumah >pembangunan bahagian belakang >Golang >Kemahiran mengendalikan ralat dalam fungsi golang
Petua pengendalian ralat dalam fungsi Golang: Gunakan ralat.Ralat() untuk menukar ralat kepada rentetan. Gunakan Printf untuk memformat mesej ralat. Gunakan bungkus untuk menambah ringkasan ralat. Tentukan jenis ralat tersuai untuk menangkap ralat pendua. Gunakan fungsi bungkus untuk mengendalikan ralat dalam respons API.
Kemahiran pengendalian ralat dalam fungsi Golang
Bahasa Go menyediakan mekanisme pengendalian ralat yang kaya yang boleh membantu kami menulis kod yang mantap dan boleh dipercayai. Artikel ini akan merangkumi teknik yang berbeza untuk mengendalikan ralat dalam fungsi Golang, bersama-sama dengan contoh.
error.Error()
Cara paling mudah ialah menggunakan error.Error()
untuk menukar mesej ralat kepada rentetan. 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
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 } }
Printf
🎜🎜Untuk ralat yang lebih kompleks, kita boleh menggunakanPrintf
untuk memformat mesej ralat. 🎜rrreee🎜🎜wrap🎜🎜🎜 Fungsi wrap
menambah lapisan ringkasan di atas ralat sedia ada. 🎜rrreee🎜🎜Jenis ralat tersuai🎜🎜🎜Untuk ralat berulang, kami boleh menentukan jenis ralat tersuai. 🎜rrreee🎜🎜Kes praktikal🎜🎜🎜Berikut ialah contoh tindak balas API menggunakan fungsi wrap
untuk mengendalikan ralat: 🎜rrreee🎜Dengan menggunakan teknik pengendalian ralat ini, kami boleh memastikan fungsi Golang dibentangkan dalam cara yang jelas dan mudah difahami. 🎜Atas ialah kandungan terperinci Kemahiran mengendalikan ralat dalam fungsi golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!