Maison >développement back-end >Golang >Application du mot-clé defer de la fonction Golang dans la gestion des exceptions

Application du mot-clé defer de la fonction Golang dans la gestion des exceptions

WBOY
WBOYoriginal
2023-05-16 13:33:141053parcourir

Golang est un langage de programmation moderne dont le style de conception simple et efficace est très apprécié par les développeurs. Dans Golang, le mot-clé defer d'une fonction est une fonctionnalité très utile, qui peut nous aider à nettoyer certaines ressources avant le retour de la fonction. De plus, le report peut également jouer un rôle important dans la gestion des exceptions. Cet article abordera son application dans la gestion des exceptions.

Quel est le mot-clé defer ?

Dans Golang, le mot-clé defer est utilisé pour retarder l'exécution d'une fonction, c'est-à-dire l'exécuter à la fin de la fonction. Pour faire simple, il indique au compilateur Golang : "Indépendamment du succès ou de l'échec de l'exécution de cette fonction, cette instruction doit être exécutée à la fin de la fonction

La méthode d'implémentation spécifique consiste à utiliser le mot-clé defer." suivi d'un appel de fonction, par exemple :

func readFile() {
    file, err := os.Open("filename.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close() // 最后关闭文件 
    // 读取文件内容 
    ...
}

Dans le code ci-dessus, nous utilisons le mot-clé defer pour fermer le fichier Que le fichier soit lu avec succès ou non, cette instruction sera finalement exécutée. Cela évite les problèmes liés à l'oubli de fermer des fichiers et à d'autres fuites de ressources.

Application du report dans la gestion des exceptions

Dans Golang, la gestion des exceptions utilise les fonctions de panique et de récupération. La soi-disant panique fait référence aux exceptions activement lancées par le programme, et recovery est utilisé pour capturer et gérer ces exceptions. En cas de panique, le mot-clé defer peut nous aider à effectuer certains travaux de nettoyage nécessaires, tels que la fermeture des fichiers ouverts, la libération de la mémoire demandée, etc.

Dans l'exemple de code ci-dessous, nous simulons une exception dans une fonction de lecture de fichier :

func readFile() {
    file, err := os.Open("filename.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close() // 最后关闭文件 
    // 读取文件内容 
    _, err = file.Read(buf)
    if err != nil {
        panic(err)
    }
}

Dans le code ci-dessus, si une exception se produit lors de la lecture du fichier, la fonction panique sera appelée pour lever une exception et ne sera pas exécutée .différer la déclaration. Cependant, si nous utilisons la fonction recovery pour la gestion des exceptions dans l'instruction defer, nous pouvons effectuer le travail de nettoyage nécessaire lorsque le programme plante :

func readFile() {
    file, err := os.Open("filename.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("程序崩溃了,错误信息为:", r)
            file.Close() // 进行清理工作 
        }
    }()
    // 读取文件内容 
    _, err = file.Read(buf)
    if err != nil {
        panic(err)
    }
}

Dans le code ci-dessus, nous utilisons une fonction anonyme pour implémenter l'instruction defer. Lorsque l'instruction defer est exécutée, si le programme plante ou si une exception se produit, la fonction anonyme sera appelée pour gérer l'exception et effectuer le travail de nettoyage nécessaire. La fonction de récupération est utilisée dans cette fonction anonyme pour capturer les informations d'exception puis les gérer.

Il convient de noter que lors de l'utilisation de defer pour la gestion des exceptions, nous devons le placer autant que possible au début de la fonction pour garantir que le travail de nettoyage des ressources nécessaire a été effectué avant le crash du programme.

Résumé

Dans Golang, le mot-clé defer d'une fonction peut nous aider à effectuer le travail de nettoyage des ressources nécessaire, et il peut également jouer un rôle énorme dans la gestion des exceptions. L'utilisation de defer peut éviter le problème de l'oubli de libérer des ressources. En même temps, elle rend également la gestion des exceptions plus simple et plus efficace. Que ce soit dans les appels de fonctions ordinaires ou dans la gestion des exceptions, le report est une fonctionnalité très utile et les développeurs doivent l'utiliser pleinement.

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!

Déclaration:
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
Article précédent:golang en minusculeArticle suivant:golang en minuscule