Heim > Backend-Entwicklung > Golang > Warum ändert das Ändern einer Struktur in einer Go-Range-Schleife nicht das ursprüngliche Slice?

Warum ändert das Ändern einer Struktur in einer Go-Range-Schleife nicht das ursprüngliche Slice?

Mary-Kate Olsen
Freigeben: 2024-12-25 08:38:11
Original
436 Leute haben es durchsucht

Why Doesn't Modifying a Struct in a Go Range Loop Change the Original Slice?

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)
}
Nach dem Login kopieren

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!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage