Maison > développement back-end > Golang > le corps du texte

Comment différer les paramètres de capture dans les fermetures Go ?

Mary-Kate Olsen
Libérer: 2024-11-10 17:53:02
original
345 Les gens l'ont consulté

How Does Defer Capture Parameters in Go Closures?

Différer la capture en Go avec ou sans paramètres

En Go, le mot-clé defer peut être utilisé pour différer l'exécution d'une fonction jusqu'au retour de la fonction environnante. Cependant, lorsqu'il est utilisé avec des fermetures anonymes, le comportement peut varier en fonction de la façon dont la fermeture capture ses paramètres.

Considérez le code suivant :

import "fmt"

func main() {
    var whatever [5]struct{}

    for i := range whatever {
        fmt.Println(i)
    } // part 1

    for i := range whatever {
        defer func() { fmt.Println(i) }()
    } // part 2

    for i := range whatever {
        defer func(n int) { fmt.Println(n) }(i)
    } // part 3
}
Copier après la connexion

Partie 2 : Fermeture sans paramètre

Dans la partie 2, la fermeture ne capture aucun paramètre. Cela signifie que lorsque la fermeture est exécutée, la variable i a la valeur qu'elle avait lors de l'exécution de l'instruction defer. Dans ce cas, j'aurai la valeur de la dernière itération de la boucle for, qui est 4. Par conséquent, le résultat de la partie 2 sera :

4 4 4 4 4
Copier après la connexion

Partie 3 : Fermeture avec paramètre

Dans la partie 3, la fermeture capture le paramètre n, qui est initialisé à la valeur de i lors de la création de la fermeture. Cela signifie que lorsque la fermeture est exécutée, n aura la valeur qu'il avait lors de l'exécution de l'instruction defer. Dans ce cas, chaque fermeture capture une valeur différente de i, ce qui donne le résultat :

4 3 2 1 0
Copier après la connexion

Conclusion

La principale différence entre la partie 2 et la partie 3 est que la partie 2 capture le i variable alors que la partie 3 ne le fait pas. Cela affecte le comportement de la fermeture lorsqu'elle est exécutée, conduisant à des sorties différentes.

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