Heim > Backend-Entwicklung > Golang > Warum schlägt das Ändern von Werten mit dem Schlüsselwort „range' von Go fehl und wie können Array-Indizes eine Lösung bieten?

Warum schlägt das Ändern von Werten mit dem Schlüsselwort „range' von Go fehl und wie können Array-Indizes eine Lösung bieten?

Susan Sarandon
Freigeben: 2024-12-27 18:27:15
Original
108 Leute haben es durchsucht

Why Does Modifying Values Using Go's `range` Keyword Fail, and How Can Array Indices Provide a Solution?

Die Verwendung von Array-Indizes über Bereichswerte

Bei der Verwendung des Schlüsselworts „range“ mit Arrays oder Slices in Go ist es wichtig, dies zu verstehen gibt den Schlüssel und eine Kopie des Werts zurück, nicht die ursprüngliche Wertreferenz. Dieses Verhalten kann zu Verwirrung führen, wenn versucht wird, Werte innerhalb der Sammlung während der Iteration zu ändern.

Im bereitgestellten Beispiel:

package main

import "fmt"

type MyType struct {
    field string
}

func main() {
    var array [10]MyType

    for _, e := range array {
        e.field = "foo"
    }

    for _, e := range array {
        fmt.Println(e.field)
        fmt.Println("--")
    }
}
Nach dem Login kopieren

Es wird erwartet, dass die Bereichsiteration die Zeichenfolge „foo“ zuweist das Feld jedes Elements im Array. Wenn jedoch die zweite Schleife die aktualisierten Werte ausgibt, bleiben alle Felder leer. Dies liegt an der kopierbasierten Semantik des Bereichs.

Um die Werte innerhalb des Arrays während der Iteration effektiv zu ändern, ist es notwendig, den Array-Index anstelle der Bereichsvariablen zu verwenden:

package main

import "fmt"

type MyType struct {
    field string
}

func main() {
    var array [10]MyType

    for idx, _ := range array {
        array[idx].field = "foo"
    }

    for _, e := range array {
        fmt.Println(e.field)
        fmt.Println("--")
    }
}
Nach dem Login kopieren

Diese Änderung stellt sicher, dass die Indexvariable auf das tatsächliche Element im Array verweist, was ordnungsgemäße Feldaktualisierungen und eine korrekte Ausgabe in der zweiten Schleife ermöglicht.

Das obige ist der detaillierte Inhalt vonWarum schlägt das Ändern von Werten mit dem Schlüsselwort „range' von Go fehl und wie können Array-Indizes eine Lösung bieten?. 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