Maison > développement back-end > Golang > capture d'erreur Golang

capture d'erreur Golang

WBOY
Libérer: 2023-05-16 17:14:38
original
716 Les gens l'ont consulté

Golang est un langage de programmation fortement typé qui fournit un bon mécanisme de gestion des erreurs au niveau du langage. La gestion des erreurs est une partie essentielle du processus de développement de Golang. Son concept de conception est de séparer la gestion des erreurs du code et de la logique métier pour obtenir un code plus lisible et maintenable.

Dans Golang, la base du mécanisme d'erreur est un type intégré - erreur. error est un type d'interface dans Golang. Il définit une méthode : Error(), qui est utilisée pour renvoyer des informations d'erreur. error peut transmettre l'exception attendue à l'appelant comme valeur de retour de la fonction, ou comme paramètre à l'appel d'autres fonctions. errorerror是Golang中的一个接口类型,它定义了一个方法:Error(),该方法用于返回错误的信息。error可以把预期的异常作为函数的返回值传递给调用者,也可以作为参数传递给其他函数的调用。

当一个函数发生错误时,它会返回一个非nil的error对象,该对象包含了错误信息。调用者可以通过检查返回的错误来判断函数是否已经成功执行。如果返回的是nil,则表示函数执行成功,否则,就意味着函数执行失败。

下面,我们将介绍一些Golang中常用的错误处理机制和技巧:

1. 使用defer 和recover

defer机制可以延迟一个函数的执行,直到函数返回前才执行。defer常用于释放资源、关闭文件、清空缓冲区等操作。recover用于恢复 [panic](https://tour.golang.org/basics/13) 之后的程序控制流,从而使程序可以继续正常执行。它只能在 defer 中调用,否则会无法工作。

在Golang中,可以使用deferrecover机制来实现错误处理,即在defer语句中使用recover来捕获函数执行过程中产生的错误信息,然后判断错误类型并进行相应的处理。

func processFile(filename string) error {
    file, err := os.Open(filename)
    if err != nil {
        return err
    }
    defer file.Close()

    // Read the file here...

    return nil
}

func main() {
    err := processFile("/path/to/myfile.txt")
    if err != nil {
        // Handle the error here...
        fmt.Println(err)
    }
}
Copier après la connexion

在上述代码中,我们首先尝试打开一个文件,如果打开时发生错误则返回该错误;接下来在defer中关闭文件;最后将nil返回,表示函数执行成功。在主函数中,如果调用函数返回的是非nil的错误,则表示函数执行失败,所以我们需要进行相应的错误处理操作。

2. 自定义error类型

在Golang中,可以通过实现Error()方法来自定义错误类型。自定义错误类型可以让代码更加易读,减少出错的可能;同时,它也可以提高代码重用性。

type customError struct {
    message string
    code    int
}

func (e *customError) Error() string {
    return fmt.Sprintf("%s [%d]", e.message, e.code)
}

func processFile(filename string) error {
    file, err := os.Open(filename)
    if err != nil {
        return &customError{"Error opening file", 1001}
    }
    defer file.Close()

    // Read the file here...

    return nil
}

func main() {
    err := processFile("/path/to/myfile.txt")
    if err != nil {
        // Handle the error here...
        fmt.Println(err)
    }
}
Copier après la connexion

在上述代码中,我们实现了一个自定义的错误类型customError,它包含了错误消息和错误代码。在processFile()函数中,如果无法打开文件,则返回一个customError对象。在主函数中,如果出现了错误,则调用Error()

Lorsqu'une erreur se produit dans une fonction, elle renvoie un objet error non nul, qui contient des informations sur l'erreur. L'appelant peut déterminer si la fonction a été exécutée avec succès en vérifiant l'erreur renvoyée. Si nil est renvoyé, cela signifie que l’exécution de la fonction a réussi ; sinon, cela signifie que l’exécution de la fonction a échoué.

Ci-dessous, nous présenterons quelques mécanismes et techniques de gestion des erreurs couramment utilisés dans Golang :

1 Utiliser le mécanisme defer et recovery
  • defer peut retarder l'exécution d'une fonction jusqu'à ce que la fonction revienne. defer est souvent utilisé pour des opérations telles que la libération de ressources, la fermeture de fichiers, l'effacement des tampons, etc. recover est utilisé pour restaurer le flux de contrôle du programme après [panic](https://tour.golang.org/basics/13) afin que le programme puisse continuer à s'exécuter normalement. Il ne peut être appelé que dans defer, sinon cela ne fonctionnera pas.
  • Dans Golang, vous pouvez utiliser les mécanismes defer et recover pour implémenter la gestion des erreurs, c'est-à-dire utiliser recover dans le <code>defer code> instruction.code> pour capturer les informations d'erreur générées lors de l'exécution de la fonction, puis déterminer le type d'erreur et le gérer en conséquence.
  • rrreee
  • Dans le code ci-dessus, nous essayons d'abord d'ouvrir un fichier, et si une erreur se produit lors de l'ouverture, l'erreur sera renvoyée ; puis fermez le fichier dans defer et enfin nil ; Return indique que la fonction est exécutée avec succès. Dans la fonction principale, si la fonction appelante renvoie une erreur non nulle, cela signifie que l'exécution de la fonction a échoué, nous devons donc effectuer les opérations de gestion des erreurs correspondantes.
  • 2. Type d'erreur personnalisé
  • Dans Golang, vous pouvez personnaliser le type d'erreur en implémentant la méthode Error(). Les types d'erreurs personnalisés peuvent rendre le code plus lisible et réduire le risque d'erreurs, tout en améliorant la réutilisabilité du code.
  • rrreee
Dans le code ci-dessus, nous avons implémenté un type d'erreur personnalisé customError, qui contient le message d'erreur et le code d'erreur. Dans la fonction processFile(), si le fichier ne peut pas être ouvert, un objet customError est renvoyé. Dans la fonction principale, si une erreur se produit, appelez la méthode Error() pour obtenir les informations sur l'erreur.

3. Meilleures pratiques de gestion des erreurs🎜🎜Voici quelques bonnes pratiques de gestion des erreurs : 🎜🎜🎜N'ignorez pas la valeur de retour : dans Golang, les valeurs de retour des fonctions peuvent être multiples et le renvoi d'erreurs est une situation très courante. . Ignorer la valeur de retour empêchera le code de déterminer si la fonction a été exécutée avec succès, ce qui entraînera des erreurs difficiles à résoudre, ce qui rendra difficile le contrôle de la qualité du code. 🎜🎜Utilisez des variables au niveau du package : dans Golang, les variables au niveau du package sont visibles et accessibles par l'ensemble du package, et les informations d'erreur globales peuvent y être enregistrées. Les développeurs peuvent modifier ces variables via des fonctions spécifiques pour enregistrer l'exactitude, la robustesse et la tolérance aux pannes du code. 🎜🎜N'imbriquez pas profondément les erreurs : s'il y a plusieurs appels de fonction imbriqués, le message d'erreur doit être renvoyé hiérarchiquement le long de la pile d'appels, et enfin traité dans la fonction de niveau supérieur. Cela garantit la lisibilité du code. 🎜🎜N’incluez pas d’informations d’identification ou de description dans le type d’erreur, utilisez plutôt un type d’erreur plus clair et plus significatif. 🎜🎜Ajouter des mots contextuels supplémentaires aux messages d'erreur : ajoutez des informations contextuelles aux messages d'erreur pour permettre au code de gestion des erreurs d'identifier plus facilement les erreurs. 🎜🎜🎜Dans Golang, la gestion des erreurs est cruciale et fait partie de la qualité du code. Les programmeurs doivent choisir différents mécanismes et techniques de gestion des erreurs en fonction de la situation réelle et suivre certaines bonnes pratiques de gestion des erreurs pour améliorer la lisibilité, la maintenabilité et la fiabilité du code. 🎜

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal