Warum kann ich die Werte in einem Bereich der Typstruktur nicht ändern?
Die Go Programming Language Specification besagt, dass für Anweisungen mit a Bereichsklausel: „Für jeden Eintrag werden Iterationswerte den entsprechenden Iterationsvariablen zugewiesen, sofern vorhanden, und dann wird der Block ausgeführt.“
In diesem Fall iterieren Sie durch ein Stück Strukturen mit der Range-Anweisung. Wenn Sie ein Feld einer Struktur im Bereich ändern, ändern Sie nur die Iterationsvariable, nicht die zugrunde liegende Struktur im Slice.
Um die zugrunde liegende Struktur zu ändern, müssen Sie über den Index von direkt darauf zugreifen die Iterationsvariable.
Zum Beispiel ändert der folgende Code die Werte im Slice korrekt:
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) }
Das obige ist der detaillierte Inhalt vonWarum ändert das Ändern einer Struktur in einer Go-Range-Schleife nicht das ursprüngliche Slice?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!