Maison > développement back-end > Golang > Pourquoi l'utilisation d'une structure dans un initialiseur de boucle Go For provoque-t-elle une erreur de compilation ?

Pourquoi l'utilisation d'une structure dans un initialiseur de boucle Go For provoque-t-elle une erreur de compilation ?

Mary-Kate Olsen
Libérer: 2024-12-31 06:16:08
original
1025 Les gens l'ont consulté

Why Does Using a Struct in a Go For Loop Initializer Cause a Compile-Time Error?

Struct in for Loop Initializer : Ambiguïté littérale composite

Dans Go, l'utilisation d'une expression struct dans un initialiseur de boucle for peut entraîner des erreurs de syntaxe s'il n'est pas manipulé correctement. Bien qu'un pointeur vers une structure fonctionne correctement, la déclaration d'une variable de structure locale nécessite une syntaxe spécifique.

Pour illustrer le problème, considérons l'extrait de code suivant :

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

Ce code génère une compilation- erreur de temps :

expected boolean or range expression, found simple statement (missing parentheses around composite literal?) (and 1 more errors)
Copier après la connexion

L'ambiguïté surgit car l'accolade ouvrante peut être interprétée comme le début soit d'un littéral composite, soit du for bloc. Pour résoudre ce problème, utilisez des parenthèses autour du littéral composite :

for r := (Request{}); r.err == nil; r.id++ {
    r.line, r.err = input.ReadSlice(0x0a)
    channel <- r
}
Copier après la connexion

Cette syntaxe déclare explicitement le littéral composite, évitant ainsi toute ambiguïté lors de l'analyse.

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