Comprendre le report et les valeurs de retour nommées dans Go
Dans Go, l'instruction defer permet aux fonctions d'exécuter du code après le retour de la fonction environnante. Ce comportement peut être utilisé pour modifier les valeurs de retour nommées de la fonction environnante.
Considérez l'exemple suivant :
func c() (i int) { defer func() { i++ }() return 1 }
Cette fonction renvoie 2, même si l'instruction return 1 est utilisée. En effet, l'instruction defer pousse un appel de fonction sur une pile, qui est exécutée immédiatement avant le retour de la fonction environnante. Par conséquent, l'instruction i est exécutée après l'instruction return 1, incrémentant la valeur de i à 2.
Comprendre les retours nus
Il est important de clarifier qu'un « nu return" dans Go fait référence à une instruction return sans aucun argument. Dans de tels cas, les valeurs de retour nommées sont renvoyées sans être explicitement attribuées.
func a() (i int) { i = 2 return }
Cette fonction renvoie 2, car l'instruction de retour nue renvoie la valeur de retour nommée i, qui a été précédemment affectée à 2.
Combiner les retours différés et non nus
Dans l'exemple de la fonction c, l'instruction defer modifie le nom valeur de retour i après l'exécution de l'instruction return 1. Ceci est effectivement équivalent au code suivant :
func c() (i int) { i = 1 defer func() { i++ }() }
Dans ce cas, l'instruction return renvoie toujours 1, mais l'instruction defer incrémente la valeur de i avant le retour de la fonction.
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!