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
Libérer: 2024-12-24 01:34:10
original
1021 Les gens l'ont consulté

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
        }
    }()
}
Copier après la connexion

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)
Copier après la connexion

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
        }
    }()
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal