Heim >Backend-Entwicklung >Golang >Erfasst Go For-Schleifenvariablen als Werte oder Variablen?

Erfasst Go For-Schleifenvariablen als Werte oder Variablen?

DDD
DDDOriginal
2024-12-24 01:09:17139Durchsuche

Does Go Capture For-Loop Variables as Values or Variables?

Erfasster Abschluss (For-Loop-Variablen) in Go

Werden For-Schleifenvariablen in Go nicht als lokal zugewiesene Abschlussvariablen erfasst?

Nein, erfasste For-Schleifenvariablen in Go werden standardmäßig als Werte und nicht als Variablen erfasst. Dieses Verhalten unterscheidet sich von Sprachen wie C#, die eine zusätzliche Syntax erfordern, um Variablen anstelle von Werten zu erfassen.

Beispiel: Schleifenvariablen als Werte erfassen

package main

import "fmt"

func main() {
    a := 1
    b := func() { fmt.Println(a) } // b captures the value of a, not the variable itself
    a++
    b() // prints 1, not 2
}

In diesem Beispiel , erfasst die Funktion b den Wert von a zum Zeitpunkt ihrer Definition, anstatt einen Verweis auf die Variable selbst beizubehalten. Folglich werden alle nach der Definition von b an a vorgenommenen Änderungen nicht in dem von b ausgegebenen Wert widergespiegelt.

Beispiel: Schleifenvariablen als Variablen erfassen

Dies ist jedoch der Fall Es ist möglich, Schleifenvariablen als Variablen zu erfassen, indem eine Abschlusssyntax verwendet wird, die für jede Iteration einen neuen Bereich erstellt:

package main

import "fmt"

func main() {
    a := 1
    for a < 10 {
        b := func() { fmt.Println(a) } // b captures the variable a in a new scope
        a++
        b() // prints 2, 3, 4, ..., 10
    }
}

In diesem Beispiel ist die Funktion func Das Schlüsselwort wird verwendet, um für jede Iteration der Schleife einen Abschluss zu erstellen. Diese Technik stellt sicher, dass jeder Abschluss einen eindeutigen Verweis auf die Schleifenvariable erfasst, sodass wir den Wert von a beobachten können, während er sich innerhalb der Schleife ändert.

Schlussfolgerung

Los Erfasst For-Schleifenvariablen standardmäßig als Werte, bietet aber auch eine Abschlusssyntax, die es ermöglicht, For-Schleifenvariablen als Variablen zu erfassen. Das Verständnis dieser Unterscheidung ist entscheidend, um Verwirrung zu vermeiden und korrekten und effizienten Go-Code zu schreiben.

Das obige ist der detaillierte Inhalt vonErfasst Go For-Schleifenvariablen als Werte oder Variablen?. 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