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 } }()
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)
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 }
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!