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
Susan Sarandonoriginal
2024-11-25 03:07:14458parcourir

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
}

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
}

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
}

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!

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