Maison >développement back-end >Golang >Pourquoi une boucle Go `for` avec un initialiseur Struct provoque-t-elle une erreur de syntaxe ?

Pourquoi une boucle Go `for` avec un initialiseur Struct provoque-t-elle une erreur de syntaxe ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-24 01:34:101030parcourir

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

Struct in for Loop Initializer Syntax Error

Dans un programme Go, l'utilisation d'une expression struct comme initialiseur dans une boucle for peut entraîner une erreur de syntaxe au moment de la compilation. Cette erreur se produit lorsque l'accolade ouvrante de l'expression struct est interprétée de manière ambiguë comme le début du bloc de boucle for.

Considérez l'exemple de code suivant :

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

Ce code ne pourra pas être compilé. avec l'erreur :

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

Pour résoudre cette ambiguïté, vous pouvez spécifier explicitement que l'expression struct est un littéral composite en la mettant entre parenthèses :

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

Avec cette modification, le code sera compilé avec succès. Les parenthèses indiquent clairement que l'accolade ouvrante fait partie d'un littéral composite, et non de la boucle for elle-même.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn