Erhaltung lokaler Variablen in Go: Eine Alternative zu „statisch“ von C
In Go gibt es im Gegensatz zu C kein direktes Äquivalent zu Schlüsselwort „static“ für lokale Variablen. Es ist jedoch weiterhin möglich, lokale Variablen zu erstellen, die ihre Werte zwischen Funktionsaufrufen beibehalten, indem das Konzept der Abschlüsse genutzt wird.
Closure to the Rescue
Ein Abschluss in Go ist eine Funktion, die die Umgebung der Funktion, in der sie erstellt wurde, erfasst und teilt. Dies umfasst den Zugriff auf Variablen, die außerhalb des Gültigkeitsbereichs des Abschlusses definiert sind. Durch die Nutzung von Abschlüssen können wir ein ähnliches Verhalten wie eine statische lokale Variable in C simulieren.
Beispiel in Go
Betrachten Sie den folgenden Code:
func main() { x := 0 func() { defer fmt.Println("x:", x) x++ }() for i := 0; i < 10; i++ { x++ } }
Hier definieren wir eine Funktion (anonym), die über die Variable „x“ in der „Haupt“-Funktion schließt. Dadurch wird der aktuelle Wert von „x“ erfasst, wenn die Funktion ausgeführt wird.
Ausgabe:
x: 1 x: 2 x: 3 .... x: 10
Wie Sie sehen können, erhöht sich der Wert von „x“. innerhalb der geschlossenen Funktion und bleibt dabei unabhängig von dem „x“, das in der „Haupt“-Funktion erhöht wird. Dies verhält sich effektiv wie eine statische lokale Variable und behält ihren Wert zwischen Funktionsaufrufen bei.
Hinweis:
Dieser Ansatz funktioniert, weil die Funktion den Wert von „x“ erfasst -Referenz statt Nebenwert. Dadurch wird sichergestellt, dass alle an „x“ innerhalb der Funktion vorgenommenen Änderungen im umschließenden Bereich widergespiegelt werden.
Das obige ist der detaillierte Inhalt vonWie kann ich das „statische' Schlüsselwort von C für lokale Variablen in Go simulieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!