Le langage Go fournit le mécanisme de gestion des erreurs suivant : Gérer directement les erreurs : vérifiez la variable err dans le corps de la fonction. Utiliser defer : exécutez le code lorsque la fonction se termine, que la fonction renvoie un résultat normal ou une erreur, pour nettoyer les ressources ou imprimer un message d'erreur. Utilisez recovery : capturez les paniques d'exécution, généralement causées par des erreurs non gérées. Types personnalisés et habillage d'erreurs : créez des types d'erreur personnalisés et encapsulez d'autres erreurs à l'aide des fonctions erreurs.Is et erreurs.As, autorisant les assertions de type.
Le langage Go fournit un puissant mécanisme de gestion des erreurs qui permet aux développeurs de gérer les erreurs de manière claire et unifiée. Cet article présentera différentes stratégies de gestion des erreurs dans Go et les démontrera à travers des cas pratiques.
Dans Go, les valeurs d'erreur sont représentées par l'interface error
, qui est juste un type qui implémente la méthode Error()
. Les valeurs d'erreur sont généralement créées via la fonction nil
ou errors.New()
. Voici comment définir et renvoyer une valeur d'erreur : error
接口表示,它只是一个实现了 Error()
方法的类型。错误值通常通过 nil
或 errors.New()
函数来创建。以下是如何定义和返回一个错误值:
func myFunction() error { return errors.New("error message") }
最简单的方法是直接处理错误,方法是在函数体中检查 err
变量:
func main() { if err := myFunction(); err != nil { log.Println(err) } }
defer
defer
语句允许在函数退出时执行代码,无论该函数是否返回正常或错误。这可以用于清理资源或打印错误消息:
func main() { defer func() { if err := recover(); err != nil { log.Println(err) } }() myFunction() }
recover
recover
函数可以捕获运行时恐慌,它通常是由未处理的错误引起的。可以通过在 main
函数中调用 recover
来处理未处理的错误:
func main() { if err := recover(); err != nil { log.Println(err) } myFunction() }
对于复杂场景,可以创建自定义错误类型并使用 errors.Is
和 errors.As
函数包装其他错误。这允许在错误层次结构中进行类型断言:
type MyError struct { error } func main() { if err := myFunction(); err != nil { if myError, ok := err.(MyError); ok { log.Println(myError) } else { log.Println(err) } } }
考虑一个需要连接到数据库并执行查询的应用程序。应用程序可以按照以下方式处理错误:
func main() { db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/database") if err != nil { log.Fatal(err) } defer db.Close() rows, err := db.Query("SELECT * FROM table") if err != nil { log.Println(err) return } defer rows.Close() for rows.Next() { var name string if err := rows.Scan(&name); err != nil { log.Println(err) continue } log.Println(name) } }
应用程序使用 defer
rrreee
err
dans le corps de la fonction : 🎜rrreee🎜Utilisez defer
🎜🎜defer
permet d'exécuter du code lorsqu'une fonction se termine, que la fonction renvoie un résultat normal ou une erreur. Cela peut être utilisé pour nettoyer les ressources ou imprimer des messages d'erreur : 🎜rrreee🎜Utilisez la fonction recover
🎜🎜recover
pour détecter les paniques d'exécution, qui sont généralement causées par des erreurs non gérées. Les erreurs non gérées peuvent être gérées en appelant recover
dans la fonction main
: 🎜rrreee🎜Types personnalisés et emballage d'erreurs🎜🎜Pour les scénarios complexes, des types d'erreur personnalisés peuvent être créés et envelopper d'autres erreurs à l'aide des fonctions errors.Is
et errors.As
. Cela permet des assertions de type dans des hiérarchies d'erreurs : 🎜rrreee🎜 Exemple pratique 🎜🎜 Considérons une application qui doit se connecter à une base de données et exécuter des requêtes. Les applications peuvent gérer les erreurs comme suit : 🎜rrreee🎜 Les applications utilisent l'instruction defer
pour garantir que les descripteurs de base de données et de requête sont correctement fermés lorsqu'une erreur est rencontrée. Il utilise également la gestion directe des erreurs pour imprimer les messages d'erreur et poursuivre le traitement afin d'éviter d'interrompre l'ensemble de l'application en raison d'une seule erreur. 🎜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!