Sobes.tech
Middle

Wat is een closure in Go en hoe werkt het?

sobes.tech AI

Antwoord van AI

Sluiting in Go is een functie die de waarde van variabelen uit de omringende lexicale omgeving "herinnert", zelfs nadat die omgeving niet meer bestaat.

Het werkingsprincipe is als volgt:

  1. Wanneer een sluiting wordt gemaakt (bijvoorbeeld binnen een andere functie), vangt deze referenties op naar variabelen uit de scope waarin deze is gedeclareerd.
  2. Deze gevangen variabelen blijven levend zolang de sluiting bestaat, zelfs als de functie waarin ze zijn gedeclareerd al is voltooid.
  3. Bij elke aanroep van de sluiting kan deze toegang krijgen tot en wijzigingen aanbrengen in deze gevangen variabelen.

Voorbeeld:

package main

import "fmt"

func makeCounter() func() int {
	count := 0 // Variabele uit de externe omgeving
	return func() int { // Dit is een sluiting
		count++ // Het wijzigt `count`
		return count
	}
}

func main() {
	counter1 := makeCounter()
	fmt.Println(counter1()) // Drukt 1 af
	fmt.Println(counter1()) // Drukt 2 af

	counter2 := makeCounter() // Maakt een nieuwe sluiting met eigen `count`
	fmt.Println(counter2()) // Drukt 1 af
}

In dit voorbeeld geeft de functie makeCounter een functie (sluiting) terug. Deze sluiting "vangt" de variabele count. Elke keer dat de geretourneerde functie wordt aangeroepen, wordt de waarde van count verhoogd, die behoort tot deze specifieke instantie van de sluiting.