Maison > développement back-end > Golang > Fermetures vs paramètres en Go : quand utiliser lequel pour les fonctions anonymes ?

Fermetures vs paramètres en Go : quand utiliser lequel pour les fonctions anonymes ?

DDD
Libérer: 2024-11-30 05:47:14
original
697 Les gens l'ont consulté

Closures vs Parameters in Go: When to Use Which for Anonymous Functions?

Paramètre vs fermeture : plongée dans les nuances

Dans Go, les fermetures et les paramètres de fonction fournissent des mécanismes distincts pour gérer les variables au sein des fonctions anonymes. Examinons les nuances et explorons quand une approche est supérieure à l'autre.

Fermetures : accès aux variables partagées

Lorsqu'une fonction anonyme agit comme une fermeture, elle conserve l'accès aux variables définies dans la portée environnante. Ces variables sont partagées entre toutes les instances de fermeture, ce qui signifie qu'elles font référence à la même adresse mémoire. Cela peut être avantageux lorsque vous souhaitez que plusieurs appels de fonction opèrent sur les mêmes données, comme le maintien d'un total cumulé ou l'incrémentation d'un compteur.

Paramètre de fonction : copie de la valeur

En revanche, lorsque vous passez un paramètre à une fonction anonyme, la fonction reçoit une copie de la valeur. Cela signifie que chaque instance de la fonction possède sa propre copie distincte de la variable, isolée de la portée appelante. Ceci est avantageux lorsque vous souhaitez que chaque appel de fonction fonctionne indépendamment, sans affecter la valeur d'origine.

Choisir la bonne approche

Le choix entre utiliser une fermeture ou un paramètre de fonction dépend du comportement souhaité . Si vous avez besoin que tous les appels de fonction partagent la même variable et ses modifications, une fermeture est plus appropriée. D'un autre côté, si chaque appel de fonction doit opérer sur sa propre copie de la variable, un paramètre doit être utilisé.

Pour illustrer cette différence, considérons ce qui suit exemples :

Fermeture :

for i := 0; i < 3; i++ {
    go func() {
        fmt.Println(i)
    }()
}
Copier après la connexion

Paramètre :

for i := 0; i < 3; i++ {
    go func(v int) {
        fmt.Println(v)
    }(i)
}
Copier après la connexion

Dans l'exemple de fermeture, tous les appels de fonction accédera à la même variable partagée i, qui a une valeur finale de 3 lorsque les goroutines s'exécuteront. Cela entraîne l'impression de la sortie 3 trois fois.

Dans l'exemple du paramètre de fonction, cependant, chaque appel de fonction reçoit une copie de la variable i au moment de l'appel. Par conséquent, la sortie est 0, 1 et 2, car chaque goroutine imprime la valeur de i au moment où elle a été passée en argument.

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