Heim > Backend-Entwicklung > Golang > Warum ändert meine Go-Range-Schleife keine Array-Elemente?

Warum ändert meine Go-Range-Schleife keine Array-Elemente?

Barbara Streisand
Freigeben: 2024-12-17 18:47:11
Original
278 Leute haben es durchsucht

Why Does My Go Range Loop Not Modify Array Elements?

Adressen anstelle von Werten für Bereichsreferenzen zurückgeben

Stellen Sie sich die Situation vor, in der eine Bereichsanweisung eine Kopie eines Werts anstelle der Originaladresse zurückgibt . Dies kann zu unerwartetem Verhalten führen, wie im folgenden Go-Code zu sehen ist:

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

In diesem Beispiel besteht die Absicht darin, die „field“-Eigenschaft jedes Elements im Array zu ändern. Da die Range-Anweisung jedoch eine Kopie des Werts zurückgibt, werden die Änderungen an einer lokalen Kopie vorgenommen und wirken sich nicht auf das ursprüngliche Array aus. Als Ergebnis zeigt die Ausgabe, dass alle „Feld“-Eigenschaften den Standardwert haben.

Um dieses Problem zu beheben, können Sie die Adresse des Elements nicht in einer Bereichsschleife zurückgeben. Stattdessen sollten Sie das Array mithilfe des Index durchlaufen, wie unten gezeigt:

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

Durch die Verwendung des Index anstelle des Werts in der for-Schleife stellen Sie sicher, dass die an der Eigenschaft „field“ vorgenommenen Änderungen berücksichtigt werden werden im ursprünglichen Array widergespiegelt.

Das obige ist der detaillierte Inhalt vonWarum ändert meine Go-Range-Schleife keine Array-Elemente?. 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