Heim > Backend-Entwicklung > Golang > Warum können Array-Elemente durch die Verwendung des Range-Schlüsselworts von Go nicht geändert werden, und wie können Array-Indizes eine Lösung bieten?

Warum können Array-Elemente durch die Verwendung des Range-Schlüsselworts von Go nicht geändert werden, und wie können Array-Indizes eine Lösung bieten?

Barbara Streisand
Freigeben: 2024-12-17 11:23:25
Original
217 Leute haben es durchsucht

Why Does Using Go's Range Keyword Fail to Modify Array Elements, and How Can Array Indices Provide a Solution?

Verwenden von Array-Indizes zur Elementänderung anstelle von Bereichswerten

Bei der Go-Programmierung iteriert das Schlüsselwort „range“ über eine Sammlung und gibt sowohl den Schlüssel zurück und die Kopie des Werts für jedes Element. Dieses Verhalten kann die Wertänderung innerhalb der Schleife behindern. Das folgende Beispiel veranschaulicht dieses Problem:

package main

import "fmt"

type MyType struct {
    field string
}

func main() {
    var array [10]MyType

    // Attempt to modify field using range values:
    for _, e := range array {
        e.field = "foo"
    }

    // Verify that field hasn't been modified:
    for _, e := range array {
        fmt.Println(e.field)
        fmt.Println("--")
    }
}
Nach dem Login kopieren

In diesem Code versuchen wir, das Feld jedes Elements im Array mithilfe einer Bereichsschleife zu ändern. Da der Bereich jedoch eine Kopie des Werts zurückgibt, bleiben die tatsächlichen Elemente im Array unverändert. Dies führt dazu, dass alle Feldwerte leer bleiben.

Lösung: Array-Indizes verwenden

Um dieses Problem zu umgehen und die tatsächlichen Elemente zu ändern, sollten Sie stattdessen Array-Indizes verwenden die von der Bereichsschleife zurückgegebenen Werte. Hier ist der geänderte Code:

import "fmt"

type MyType struct {
    field string
}

func main() {
    var array [10]MyType

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

    // Verify that field has been modified:
    for _, e := range array {
        fmt.Println(e.field)
        fmt.Println("--")
    }
}
Nach dem Login kopieren

Durch die Verwendung des Index jedes Elements anstelle des Werts können wir direkt auf die tatsächlichen Elemente im Array zugreifen und diese ändern. Dadurch wird sichergestellt, dass die Feldwerte korrekt aktualisiert werden.

Das obige ist der detaillierte Inhalt vonWarum können Array-Elemente durch die Verwendung des Range-Schlüsselworts von Go nicht geändert werden, 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