Comportement différé pour les variables déclarées différemment dans Golang
Les fonctions avec des paramètres de résultat nommés se comportent différemment lors de l'utilisation de l'instruction defer par rapport aux fonctions avec des paramètres d'entrée . Dans cet exemple, nous examinons ces différences :
package main import ( "fmt" ) func c(i int) int { defer func() { i++ }() return i } func c1() (i int) { defer func() { i++ }() return i } func c2() (i int) { defer func() { i++ }() return 2 } func main() { fmt.Println(c(0)) // Prints 0 fmt.Println(c1()) // Prints 1 fmt.Println(c2()) // Prints 3 }
c(i int):
Dans ce cas, i est un paramètre entrant. La valeur de retour est évaluée avant l'exécution de la fonction différée, donc incrémenter i après le retour n'a aucun effet.
c1():
Ici, i est le paramètre de résultat . L'instruction return i attribue la valeur de i à la valeur de retour. Cependant, les fonctions différées peuvent modifier les variables de retour. Dans ce cas, la fonction différée incrémente i, ce qui donne une valeur de retour de 1.
c2() :
Similaire à c1(), l'instruction return 2 attribue 2 à i. Cependant, dans ce cas, la fonction différée s'exécute après l'instruction return, ce qui donne une valeur de retour de 3.
En résumé, lorsque vous travaillez avec des paramètres de résultat nommés dans Go, il est important de se rappeler que les fonctions différées peuvent modifier leurs valeurs même après l'instruction return. Ce comportement est explicitement mentionné dans la spécification Go et peut être utilisé pour modifier les valeurs de retour si nécessaire.
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!