Heim > Backend-Entwicklung > Golang > Warum verursacht die Verwendung einer Struktur in einem Go For-Schleifeninitialisierer einen Fehler bei der Kompilierung?

Warum verursacht die Verwendung einer Struktur in einem Go For-Schleifeninitialisierer einen Fehler bei der Kompilierung?

Mary-Kate Olsen
Freigeben: 2024-12-31 06:16:08
Original
1024 Leute haben es durchsucht

Why Does Using a Struct in a Go For Loop Initializer Cause a Compile-Time Error?

Struktur im For-Schleifeninitialisierer: Mehrdeutigkeit zusammengesetzter Literale

In Go kann die Verwendung eines Strukturausdrucks in einem For-Schleifeninitialisierer zu Syntaxfehlern führen wenn nicht richtig gehandhabt wird. Während ein Zeiger auf eine Struktur einwandfrei funktioniert, erfordert die Deklaration einer lokalen Strukturvariablen eine bestimmte Syntax.

Um das Problem zu veranschaulichen, betrachten Sie den folgenden Codeausschnitt:

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

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 Kompilierungsfehler aus. Zeitfehler:

expected boolean or range expression, found simple statement (missing parentheses around composite literal?) (and 1 more errors)
Nach dem Login kopieren

Die Mehrdeutigkeit entsteht, weil die öffnende Klammer entweder als Anfang eines zusammengesetzten Literals oder interpretiert werden kann der for-Block. Um dieses Problem zu beheben, verwenden Sie Klammern um das zusammengesetzte Literal:

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

Diese Syntax deklariert das zusammengesetzte Literal explizit und vermeidet so Mehrdeutigkeiten beim Parsen.

Das obige ist der detaillierte Inhalt vonWarum verursacht die Verwendung einer Struktur in einem Go For-Schleifeninitialisierer einen Fehler bei der Kompilierung?. 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