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!