Bereichsvariablen in Go verstehen
F: Warum kann ich Werte innerhalb eines Bereichs der Typstruktur nicht ändern?
In Go kann das Konzept der Slices und Ranges für Neulinge verwirrend sein. Eine Range-Anweisung durchläuft Elemente in einer Sammlung und weist sie Iterationsvariablen zu. Im Fall einer Struktur werden durch das Ändern dieser Variablen jedoch nicht die ursprünglichen Werte geändert.
A: Zuweisen von Iterationsvariablen
Die Go Programming Language Specification besagt, dass für Bei Anweisungen mit einer Bereichsklausel werden Iterationsvariablen die Werte jedes Elements in der Sammlung zugewiesen. Diese Variablen sind jedoch nur lokal für den Schleifenkörper.
Iterationsvariablen ändern
Wenn Sie eine Iterationsvariable innerhalb einer Schleife ändern, ändern Sie nicht tatsächlich das Original Wert in der Sammlung. Stattdessen erstellen Sie eine neue Kopie des Werts und weisen ihn der Iterationsvariablen zu.
Lösung: Geänderte Werte zuweisen
Um die ursprünglichen Werte in der Sammlung zu ändern , müssen Sie die geänderten Iterationsvariablen wieder der ursprünglichen Sammlung zuweisen. Im Beispielcode muss die geänderte Iterationsvariable für elem.Count wieder chartRecords[i] zugewiesen werden.
Aktualisierter Code
Hier ist der aktualisierte Code mit die notwendige Änderung:
for i, elem := range chartRecords { elem.Count = modMe(mod, i) chartRecords[i] = elem fmt.Printf("No: %2d | Count: %2d | Name = %s\r\n", i, elem.Count, elem.Name) }
Diese Änderung stellt sicher, dass der geänderte elem.Count-Wert ordnungsgemäß wieder den chartRecords zugewiesen wird Scheibe.
Das obige ist der detaillierte Inhalt vonWarum kann ich Strukturwerte nicht direkt innerhalb einer Go-Range-Schleife ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!