Heim >Backend-Entwicklung >Golang >Warum verursacht eine Go-for-Schleife mit einem Strukturinitialisierer einen Syntaxfehler?
Syntaxfehler in der Struktur des for-Schleifeninitialisierers
In einem Go-Programm kann die Verwendung eines Strukturausdrucks als Initialisierer in einer for-Schleife zu Folgendem führen: ein Syntaxfehler zur Kompilierzeit. Dieser Fehler tritt auf, wenn die öffnende geschweifte Klammer des Strukturausdrucks mehrdeutig als Beginn des for-Schleifenblocks interpretiert wird.
Betrachten Sie das folgende Codebeispiel:
type Request struct { id int line []byte err error } func main() { go func() { for r := Request{}; r.err == nil; r.id++ { r.line, r.err = input.ReadSlice(0x0a) channel <- r } }() }
Dieser Code kann nicht kompiliert werden mit dem Fehler:
expected boolean or range expression, found simple statement (missing parentheses around composite literal?) (and 1 more errors)
Um diese Mehrdeutigkeit aufzulösen, können Sie explizit angeben, dass der Strukturausdruck ein zusammengesetztes Literal ist Setzen Sie es in Klammern:
func main() { go func() { for r := (Request{}); r.err == nil; r.id++ { r.line, r.err = input.ReadSlice(0x0a) channel <- r } }() }
Mit dieser Änderung wird der Code erfolgreich kompiliert. Die Klammern machen deutlich, dass die öffnende Klammer Teil eines zusammengesetzten Literals ist und nicht die for-Schleife selbst.
Das obige ist der detaillierte Inhalt vonWarum verursacht eine Go-for-Schleife mit einem Strukturinitialisierer einen Syntaxfehler?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!