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
Mary-Kate OlsenOriginal
2024-12-25 08:38:11449Durchsuche

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)
}

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!

Stellungnahme:
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