Heim >Backend-Entwicklung >Golang >Warum verursacht eine Go-for-Schleife mit einem Strukturinitialisierer einen Syntaxfehler?

Warum verursacht eine Go-for-Schleife mit einem Strukturinitialisierer einen Syntaxfehler?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-24 01:34:101018Durchsuche

Why Does a Go `for` Loop with a Struct Initializer Cause a Syntax Error?

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!

Stellungnahme:
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