Heim > Backend-Entwicklung > Golang > Warum kann ich Strukturwerte nicht direkt innerhalb einer Go-Range-Schleife ändern?

Warum kann ich Strukturwerte nicht direkt innerhalb einer Go-Range-Schleife ändern?

Linda Hamilton
Freigeben: 2024-12-26 19:01:09
Original
646 Leute haben es durchsucht

Why Can't I Modify Struct Values Directly Within a Go Range Loop?

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

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!

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