Heim > Backend-Entwicklung > Golang > Warum schlägt eine Go-for-Schleife mit einem Strukturausdrucksinitialisierer fehl und wie kann das Problem behoben werden?

Warum schlägt eine Go-for-Schleife mit einem Strukturausdrucksinitialisierer fehl und wie kann das Problem behoben werden?

DDD
Freigeben: 2024-12-31 15:20:11
Original
380 Leute haben es durchsucht

Why Does a Go `for` Loop Fail with a Struct Expression Initializer, and How Can It Be Fixed?

Strukturausdruck im For-Schleifen-Initialisierer

In Go kann die Verwendung eines Strukturausdrucks als Initialisierer in einer for-Schleife während der Kompilierung zu Syntaxfehlern führen. Während Zeiger auf Strukturen akzeptabel sind, können durch Strukturausdrücke deklarierte lokale Variablen Probleme verursachen.

Beachten Sie den folgenden Codeausschnitt:

type Request struct {
    id   int
    line []byte
    err  error
}

go func() {
    for r := Request{}; r.err == nil; r.id++ {
        r.line, r.err = input.ReadSlice(0x0a)
        channel <- r
    }
}()
Nach dem Login kopieren

Dieser Code löst einen Fehler bei der Kompilierung aus: „erwartet Boolescher Ausdruck oder Bereichsausdruck, einfache Anweisung gefunden (fehlende Klammern um zusammengesetztes Literal?)“. Die Mehrdeutigkeit entsteht, weil die öffnende geschweifte Klammer { entweder als Anfang eines zusammengesetzten Literals oder als öffnende geschweifte Klammer des for-Blocks interpretiert werden kann.

Um diese Mehrdeutigkeit aufzulösen, schließen Sie den Strukturausdruck in Klammern ein und machen Sie das deutlich Es handelt sich um ein zusammengesetztes Literal:

for r := (Request{}); r.err == nil; r.id++ {
    r.line, r.err = input.ReadSlice(0x0a)
    channel <- r
}
Nach dem Login kopieren

Mit dieser Änderung wird der Code erfolgreich kompiliert und wie vorgesehen ausgeführt, wobei die lokale Variable r mit a initialisiert wird Neue Anforderungsstruktur erstellen und ihren ID-Wert bei jeder Iteration erhöhen.

Das obige ist der detaillierte Inhalt vonWarum schlägt eine Go-for-Schleife mit einem Strukturausdrucksinitialisierer fehl und wie kann das Problem behoben werden?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage