Go 1.22 behebt den Fehler bei Schleifenvariablen

Go 1.21, das letzten Monat offiziell veröffentlicht wurde, hat die Semantik von for-Schleifenvariablen geändert (im Vorschaustadium klicken Sie hier, um Details anzuzeigen ).

Nun sagt das Go-Team, dass Go 1.22 diese Funktion als offizielle Funktion veröffentlichen wird .

Laut Russ Cox (rsc), technischer Leiter des Go-Entwicklungsteams, besteht ein häufiger Fehler, den Go-Entwickler machen, darin, einen Verweis auf die Schleifenvariable beizubehalten, nachdem die Schleifeniteration beendet ist und sie dann einen unerwarteten neuen Wert annimmt.

Zum Beispiel das folgende Programm:

func main() {
    done := make(chan bool)

    values := []string{"a", "b", "c"}
    for _, v := range values {
        go func() {
            fmt.Println(v)
            done <- true
        }()
    }

    // wait for all goroutines to complete before exiting
    for _ = range values {
        <-done
    }
}

Die drei von ihm erstellten Goroutinen werden alle zum Drucken derselben Variablen verwendet v, sodass sie nur „c“, „c“, „c“ und nicht „a“, „b“ und „c“ der Reihe nach ausgeben.

Ab Go1.21 können Entwickler GOEXPERIMENT=loopvardie Erstellung von Go-Programmen ermöglichen, um das oben erwähnte Problem mit for-Schleifenvariablen zu lösen.

Build-Befehl:

GOEXPERIMENT=loopvar go install my/program
GOEXPERIMENT=loopvar go build my/program
GOEXPERIMENT=loopvar go test my/program
GOEXPERIMENT=loopvar go test my/program -bench=.
...

Nun teilt das Go-Entwicklungsteam mit, dass ab Go1.22 die neue for-Schleifensemantik standardmäßig aktiviert wird, wenn die Go-Version in der Datei go.mod größer oder gleich Go1.22 ist.

Je suppose que tu aimes

Origine www.oschina.net/news/258984/golang-loopvar-preview
conseillé
Classement