Heim > Backend-Entwicklung > Golang > Warum erzeugen Golangs For-Schleifen bei Verwendung von Abschlüssen unterschiedliche Ausgaben?

Warum erzeugen Golangs For-Schleifen bei Verwendung von Abschlüssen unterschiedliche Ausgaben?

DDD
Freigeben: 2024-12-14 19:42:17
Original
475 Leute haben es durchsucht

Why Do Golang's For Loops Produce Different Outputs When Using Closures?

Unterschiedliches Schleifenverhalten in Golang verstehen

In diesem Code erstellen wir zwei for-Schleifen (loop1 und loop2), die über einen Abschnitt von Zeichenfolgen (cmds) iterieren. Die resultierende Ausgabe dieser Schleifen unterscheidet sich jedoch.

Schleife1: Unerwartete Ausgabe

In Schleife1 wird nach der Iteration über cmds eine Zuordnung (Aktionen) erstellt, in der jeder Befehl einer Funktion zugeordnet wird, die druckt den Befehl. Wenn diese Funktionen ausgeführt werden, geben sie alle „update“ aus, das letzte Element in cmds.

Loop2: Gewünschte Ausgabe

In Loop2 wird ein ähnlicher Ansatz gewählt, jedoch statt zu speichern Bei direkten Befehlsverweisen in der Aktionszuordnung wird eine Kopie des Befehls unter Verwendung seines Index erstellt. Dadurch wird sichergestellt, dass jede Funktion über eine eigene Kopie des Befehls verfügt, wodurch die unerwartete „Update“-Ausgabe von Schleife1 verhindert wird.

Erklärung

Das eigenartige Verhalten in Schleife1 tritt aufgrund der Art und Weise auf, wie Abschlüsse (in die Aktionszuordnung) Referenzschleifenvariablen.

  • In Schleife1 ist cmd eine Schleifenvariable, die in jeder Iteration geändert wird. Wenn Funktionen innerhalb der Schleife erstellt werden, verweisen sie auf diese Schleifenvariable.
  • Nach Abschluss der Schleife ist die Schleifenvariable cmd jedoch nicht mehr zugänglich und alle Funktionen verweisen auf den letzten Wert, den sie enthielt („Aktualisierung“). ).

Durch das Erstellen einer Kopie der Schleifenvariablen für jede Funktion (wie in Schleife2 erfolgt) verfügt jede Funktion über ihre eigene isolierte Variable, die von der nachfolgenden Schleife nicht beeinflusst wird Iterationen.

Fazit

Dieses Beispiel verdeutlicht die Bedeutung des Variablenbereichs in Golang und die Unterscheidung zwischen Schleifenvariablen und durch Kopieren erstellten losgelösten Variablen. Bei der Arbeit mit Abschlüssen, die auf Schleifenvariablen verweisen, ist es wichtig sicherzustellen, dass Kopien erstellt werden, um unerwartetes Verhalten aufgrund der Wiederverwendung von Variablen zu verhindern.

Das obige ist der detaillierte Inhalt vonWarum erzeugen Golangs For-Schleifen bei Verwendung von Abschlüssen unterschiedliche Ausgaben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage