Maison > développement back-end > Golang > Comment les instructions « defer » de Go affectent-elles les valeurs de retour basées sur les déclarations de variables ?

Comment les instructions « defer » de Go affectent-elles les valeurs de retour basées sur les déclarations de variables ?

Susan Sarandon
Libérer: 2024-11-25 03:07:14
original
445 Les gens l'ont consulté

How Do Go's `defer` Statements Affect Return Values Based on Variable Declarations?

Comprendre les valeurs de report et de retour dans Go : pourquoi les résultats diffèrent avec les déclarations de variables

Dans Go, l'instruction defer est utilisée pour planifier l'exécution d'une fonction après l'environnement. la fonction revient. Cependant, lorsqu'il s'agit d'accéder et de modifier les valeurs des variables dans la fonction différée, le comportement peut varier en fonction de la manière dont les variables sont déclarées.

Cas 1 : Variable déclarée comme paramètre entrant

Considérons l'exemple suivant :

func c(i int) int {
    defer func() { i++ }()
    return i
}
Copier après la connexion

Ici, i est déclaré comme paramètre entrant. Lorsque l'instruction return est exécutée, la valeur de retour est évaluée et la fonction différée s'exécute après ceci. Par conséquent, l'incrémentation de i dans la fonction différée n'a aucun effet sur la valeur de retour, et c(0) affichera 0.

Cas 2 : Variable déclarée comme paramètre de résultat

Regardons maintenant cet exemple :

func c1() (i int) {
    defer func() { i++ }()
    return i
}
Copier après la connexion

Dans ce cas, i est déclaré comme nom du paramètre de résultat. Lorsque l'instruction return est exécutée, la valeur de i est explicitement renvoyée. La fonction différée est alors autorisée à modifier la valeur de i, ce qui affecte la valeur réelle renvoyée. C'est pourquoi c1() imprime 1.

Cas 3 : paramètre de résultat avec valeur de retour explicite

Pour illustrer davantage, considérons cet exemple :

func c2() (i int) {
    defer func() { i++ }()
    return 2
}
Copier après la connexion

Ici, même si la fonction defer modifie i, l'instruction return explicite attribue la valeur 2 à i avant l'exécution de la fonction defer. En conséquence, c2() renvoie 3.

Conclusion

La clé à retenir est que dans Go, si une fonction a nommé des paramètres de résultat, les valeurs de retour sont les valeurs de ces variables. Cependant, une instruction return peut attribuer de nouvelles valeurs à ces paramètres de résultat, et les fonctions différées peuvent les modifier après l'instruction return, affectant les valeurs renvoyées réelles.

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