Maison > Article > développement back-end > Compétences en gestion des erreurs dans les fonctions Golang
Conseils de gestion des erreurs dans les fonctions Golang : utilisez error.Error() pour convertir les erreurs en chaînes. Utilisez Printf pour formater les messages d'erreur. Utilisez wrap pour ajouter un résumé des erreurs. Définissez des types d’erreurs personnalisés pour détecter les erreurs en double. Utilisez la fonction wrap pour gérer les erreurs dans les réponses de l'API.
Compétences de gestion des erreurs dans les fonctions Golang
Le langage Go fournit un riche mécanisme de gestion des erreurs qui peut nous aider à écrire du code robuste et fiable. Cet article couvrira différentes techniques de gestion des erreurs dans les fonctions Golang, ainsi que des exemples.
error.Error()
Le moyen le plus simple est d'utiliser error.Error()
pour convertir le message d'erreur en chaîne. 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
🎜🎜Pour des erreurs plus complexes, nous pouvons utiliserPrintf
pour formater le message d'erreur. 🎜rrreee🎜🎜wrap🎜🎜🎜 La fonction wrap
ajoute une couche de résumé en plus des erreurs existantes. 🎜rrreee🎜🎜Types d'erreur personnalisés🎜🎜🎜Pour les erreurs récurrentes, nous pouvons définir des types d'erreur personnalisés. 🎜rrreee🎜🎜Cas pratique🎜🎜🎜Ce qui suit est un exemple de réponse API utilisant la fonction wrap
pour gérer les erreurs : 🎜rrreee🎜En utilisant ces techniques de gestion des erreurs, nous pouvons nous assurer que les fonctions Golang sont présentées dans de manière claire et compréhensible. Signaler les erreurs dans le mode de fonctionnement. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!