Maison > développement back-end > Golang > Comment les instructions « defer » de Go affectent-elles les variables déclarées comme paramètres d'entrée par rapport aux paramètres de résultat nommés ?

Comment les instructions « defer » de Go affectent-elles les variables déclarées comme paramètres d'entrée par rapport aux paramètres de résultat nommés ?

Susan Sarandon
Libérer: 2024-11-25 20:11:12
original
217 Les gens l'ont consulté

How Do Go's `defer` Statements Affect Variables Declared as Input Parameters vs. Named Result Parameters?

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

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!

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