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