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
Susan SarandonOriginal
2024-12-27 18:27:15116Durchsuche

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

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

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!

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