Wat is het resultaat van het toewijzen van een waarde aan een variabele met behulp van de defer-constructie, wanneer de waarde binnen een functie wordt ingesteld?
sobes.tech AI
Antwoord van AI
In Go vertraagt het sleutelwoord defer de uitvoering van een functie tot het einde van de omringende functie. De argumenten van de functie die aan defer worden doorgegeven, worden onmiddellijk geëvalueerd op het moment van de declaratie van defer, niet tijdens de uitvoering.
Als een variabele binnen de door defer aangeroepen functie wordt gebruikt, is de waarde van de variabele die op dat moment bij de declaratie van defer was, als deze als argument wordt doorgegeven. Als de variabele direct wordt gebruikt (bijvoorbeeld via een closure), wordt de huidige waarde op het moment van uitvoering van de uitgestelde functie gebruikt.
Voorbeeld:
func voorbeeld() {
x := 1
defer fmt.Println(x) // x zal 1 zijn, omdat het argument onmiddellijk wordt geëvalueerd
x = 2
}
// Bij het aanroepen van voorbeeld(), wordt weergegeven: 1
Als een closure wordt gebruikt:
func voorbeeld() {
x := 1
defer func() { fmt.Println(x) }() // de functie wordt opgeroepen bij het verlaten, x zal 2 zijn
x = 2
}
// Bij het aanroepen van voorbeeld(), wordt weergegeven: 2
Dus, het resultaat van de toewijzing aan een variabele in defer hangt af van hoe de variabele wordt gebruikt — als argument van een functie of via een closure.