0 Tage Serie
go / intermediate
Snippet

Kapselung des Zustands innerhalb von Closures

Ein Closure ist ein Funktionswert, der Variablen außerhalb seines Funktionskörpers referenziert. Das Zurückgeben einer Funktion, die auf eine lokale Variable verweist, bindet diese Variable an die Instanz der Funktion. Dies kapselt den Zustand ohne die explizite Verwendung von Structs.

snippet.go
go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package main
import "fmt"
func newCounter() func() int {
count := 0
return func() int {
count++
return count
}
}
func main() {
counter := newCounter()
fmt.Println(counter())
fmt.Println(counter())
anotherCounter := newCounter()
fmt.Println(anotherCounter())
}
Erklärung
1
func newCounter() func() int {
Definiert eine Funktion höherer Ordnung, die eine andere Funktion zurückgibt, welche wiederum ein int liefert.
2
count := 0
Deklariert eine lokale Variable, deren Gültigkeitsbereich erweitert wird, da sie vom zurückgegebenen Closure erfasst wird.
3
return func() int {
Gibt die anonyme innere Funktion (Closure) zurück, die die äußere Variable liest und modifiziert.