Maison > développement back-end > Golang > Comment le mot-clé « defer » de Go simplifie-t-il la gestion des ressources et la gestion des paniques ?

Comment le mot-clé « defer » de Go simplifie-t-il la gestion des ressources et la gestion des paniques ?

Linda Hamilton
Libérer: 2024-12-14 14:12:15
original
571 Les gens l'ont consulté

How Does Go's `defer` Keyword Simplify Resource Management and Panic Handling?

Utilisation de defer dans Go

Le mot-clé defer dans Go vous permet d'exécuter une fonction juste avant le retour de la fonction environnante, garantissant que les actions sont pris même en cas de panique.

Avantages du report par rapport au code placé sur la fonction Fin

  • Dé-/Allocation fiable des ressources :
    le report garantit le nettoyage des ressources, comme la fermeture de fichiers, même lorsque la fonction panique ou revient brusquement.
  • Gestion des paniques :
    Les fonctions différées peuvent gérer les paniques en appelant recovery(). Cela permet une gestion et une récupération personnalisées des erreurs.
  • Ordre d'exécution contrôlé :
    Les appels différés sont empilés dans l'ordre inverse et exécutés au retour de la fonction environnante, offrant un moyen déterministe de désallouer les ressources. .
  • Aucune étendue imbriquée :
    Contrairement à try-catch-finally blocs, defer simplifie la structure de la fonction environnante en évitant les portées imbriquées.

Exemples :

  • Ressource Try-finally Nettoyage :

    func main() {
        f, err := os.Create("file")
        if err != nil {
            panic("cannot create file")
        }
        defer f.Close()
        fmt.Fprintf(f, "hello")
    }
    Copier après la connexion
  • Essayez-attrapez-enfin avec la gestion de la panique :

    func main() {
        defer func() {
            msg := recover()
            fmt.Println(msg)
        }()
        f, err := os.Create(".") // . is the current directory
        if err != nil {
            panic("cannot create file")
        }
        defer f.Close()
        fmt.Fprintf(f, "hello")
    }
    Copier après la connexion
  • Retour modifié Valeurs :

    func yes() (text string) {
        defer func() {
            text = "no"
        }()
        return "yes"
    }
    
    func main() {
        fmt.Println(yes()) // Prints "no"
    }
    Copier après la connexion

En résumé, le report dans Go offre un moyen flexible d'assurer le nettoyage des ressources, de gérer les paniques et de contrôler l'ordre d'exécution sans avoir besoin de structures de blocs imbriquées.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal