In Go bieten Abschlüsse und Funktionsparameter unterschiedliche Mechanismen für den Umgang mit Variablen innerhalb anonymer Funktionen. Lassen Sie uns in die Nuancen eintauchen und herausfinden, wann ein Ansatz dem anderen überlegen ist.
Wenn eine anonyme Funktion als Abschluss fungiert, behält sie den Zugriff auf die in definierten Variablen den umgebenden Umfang. Diese Variablen werden von allen Instanzen des Abschlusses gemeinsam genutzt, was bedeutet, dass sie auf dieselbe Speicheradresse verweisen. Dies kann von Vorteil sein, wenn Sie möchten, dass mehrere Funktionsaufrufe mit denselben Daten arbeiten, z. B. um eine laufende Summe zu verwalten oder einen Zähler zu erhöhen.
Im Gegensatz dazu, wenn Sie Wenn Sie einen Parameter an eine anonyme Funktion übergeben, erhält die Funktion eine Kopie des Werts. Dies bedeutet, dass jede Instanz der Funktion über eine eigene Kopie der Variablen verfügt, die vom aufrufenden Bereich isoliert ist. Dies ist von Vorteil, wenn Sie möchten, dass jeder Funktionsaufruf unabhängig ausgeführt wird, ohne den ursprünglichen Wert zu beeinträchtigen.
Die Wahl zwischen der Verwendung eines Abschlusses oder eines Funktionsparameters hängt vom beabsichtigten Verhalten ab . Wenn alle Funktionsaufrufe dieselbe Variable und ihre Änderungen gemeinsam nutzen müssen, ist ein Abschluss besser geeignet. Wenn andererseits jeder Funktionsaufruf mit einer eigenen Kopie der Variablen arbeiten soll, sollte ein Parameter verwendet werden.
Um diesen Unterschied zu veranschaulichen, betrachten Sie die folgenden Beispiele:
Verschluss:
for i := 0; i < 3; i++ { go func() { fmt.Println(i) }() }
Parameter:
for i := 0; i < 3; i++ { go func(v int) { fmt.Println(v) }(i) }
Im Beispiel für einen Abschluss: Alle Funktionsaufrufe greifen auf dieselbe gemeinsam genutzte Variable i zu, die bei der Ausführung der Goroutinen den Endwert 3 hat. Dies führt dazu, dass die Ausgabe 3 dreimal gedruckt wird.
Im Funktionsparameter-Beispiel erhält jedoch jeder Funktionsaufruf zum Zeitpunkt des Aufrufs eine Kopie der Variablen i. Daher ist die Ausgabe 0, 1 und 2, da jede Goroutine den Wert von i in dem Moment ausgibt, in dem sie als Argument übergeben wurde.
Das obige ist der detaillierte Inhalt vonAbschlüsse vs. Parameter in Go: Wann welche für anonyme Funktionen verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!