Maison > développement back-end > Golang > Comment les instructions « defer » et les valeurs de retour nommées interagissent-elles dans Go ?

Comment les instructions « defer » et les valeurs de retour nommées interagissent-elles dans Go ?

Mary-Kate Olsen
Libérer: 2024-12-01 18:23:09
original
867 Les gens l'ont consulté

How Do `defer` Statements and Named Return Values Interact in Go?

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
}
Copier après la connexion

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
}
Copier après la connexion

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++ }()
}
Copier après la connexion

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!

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