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 mainimport "fmt"func newCounter() func() int {count := 0return 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.