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.
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.
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.
Das eigenartige Verhalten in Schleife1 tritt aufgrund der Art und Weise auf, wie Abschlüsse (in die Aktionszuordnung) Referenzschleifenvariablen.
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.
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!