Heim > Backend-Entwicklung > Golang > Golang-Fehler: „Zuweisung zur Bereichsvariablen nicht möglich …' Wie kann ich das Problem lösen?

Golang-Fehler: „Zuweisung zur Bereichsvariablen nicht möglich …' Wie kann ich das Problem lösen?

王林
Freigeben: 2023-06-24 13:43:40
Original
833 Leute haben es durchsucht

Als ich kürzlich Code in Golang schrieb, stieß ich auf einen Fehler: „Zuordnung zur Bereichsvariablen nicht möglich ...“ Dieser Fehler machte mich sehr beunruhigt, weil ich nicht wusste, wie ich ihn lösen sollte. Nach einigem Erforschen und Recherchieren habe ich endlich die Lösung gefunden und teile sie nun mit Ihnen.

Schauen wir uns zunächst das Szenario an, in dem dieser Fehler auftritt. In Golang verwenden wir normalerweise das Schlüsselwort „range“, um Elemente in einem Container (z. B. Arrays, Slices usw.) zu iterieren. Wenn wir die Elemente während des Iterationsprozesses ändern möchten, erscheint die Fehlermeldung „Zuweisung zur Bereichsvariablen nicht möglich …“. wird erscheinen. Hier ist ein Beispiel:

package main

import "fmt"

func main() {
    nums := []int{1, 2, 3, 4, 5}
    for _, num := range nums {
        num = num * 2 // 报错:“cannot assign to range variable num”
    }
    fmt.Println(nums)
}
Nach dem Login kopieren

In diesem Beispiel möchten wir jedes Element in Nums mit 2 multiplizieren. Während des Kompilierungsprozesses ist jedoch ein Fehler aufgetreten: „Zuweisung zur Bereichsvariablen Num nicht möglich.“ Deshalb Wollstoff?

Der Grund dafür ist, dass die Range-Schlüsselwort-Iteration in Golang eine Kopie des Elements erhält, nicht das Element selbst. Durch das Ändern der Kopie innerhalb des Schleifenkörpers wird das ursprüngliche Element nicht geändert. Daher ist die Änderung des Werts von „num“ ungültig und es tritt ein Fehler auf.

Wie kann man dieses Problem lösen? Es gibt zwei Möglichkeiten, dieses Problem zu lösen.

Methode 1: Indexiteration verwenden

Wir können den Index in der for-Schleife verwenden, um die Elemente im Container zu iterieren und dann den Wert des ursprünglichen Elements zu ändern, anstatt den Wert der Kopie zu ändern. Das Folgende ist die Code-Implementierung:

package main

import "fmt"

func main() {
    nums := []int{1, 2, 3, 4, 5}
    for i := range nums {
        nums[i] = nums[i] * 2
    }
    fmt.Println(nums)
}
Nach dem Login kopieren

Im Code verwenden wir i als Index, um die Elemente im Container nums zu iterieren und den Wert von nums[i] zu ändern. Auf diese Weise kann der Wert des ursprünglichen Elements erfolgreich geändert werden und das Ausgabeergebnis ist [2 4 6 8 10].

Methode 2: Zeiger verwenden

Wir können auch Zeiger auf Elemente verwenden, um dieses Problem zu lösen. Der Wert des ursprünglichen Elements kann geändert werden, indem ein Zeiger auf die iterierte Kopie als Parameter an eine Funktion übergeben wird. Das Folgende ist die Code-Implementierung:

package main

import "fmt"

func double(num *int) {
    *num = *num * 2
}

func main() {
    nums := []int{1, 2, 3, 4, 5}
    for i, num := range nums {
        double(&nums[i])
    }
    fmt.Println(nums)
}
Nach dem Login kopieren

Im Code definieren wir eine Doppelfunktion, deren Parameter ein Zeiger auf den Typ int ist. In der for-Schleife iterieren wir über die Elemente des Containers nums und übergeben den Zeiger der iterierten Kopie an die Double-Funktion, die den Wert des ursprünglichen Elements ändert und ihn zurückgibt. Auf diese Weise kann der Wert des ursprünglichen Elements erfolgreich geändert werden und das Ausgabeergebnis ist [2 4 6 8 10].

Zusammenfassend lässt sich sagen, dass wir zwei Methoden verwenden können, um den Fehler „Zuordnung zur Bereichsvariable nicht möglich...“ in Golang zu beheben, nämlich die Indexiteration und die Verwendung von Zeigern. Es ist notwendig, die geeignete Lösungsmethode entsprechend den spezifischen Geschäftsanforderungen auszuwählen.

Das obige ist der detaillierte Inhalt vonGolang-Fehler: „Zuweisung zur Bereichsvariablen nicht möglich …' Wie kann ich das Problem lösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage