Maison >développement back-end >Golang >Pourquoi une boucle Go `for` échoue-t-elle avec un initialiseur d'expression Struct et comment peut-elle être corrigée ?
Dans Go, l'utilisation d'une expression struct comme initialiseur dans une boucle for peut rencontrer des erreurs de syntaxe lors de la compilation. Bien que les pointeurs vers des structures soient acceptables, les variables locales déclarées via des expressions de structure peuvent soulever des problèmes.
Considérez l'extrait de code suivant :
type Request struct { id int line []byte err error } go func() { for r := Request{}; r.err == nil; r.id++ { r.line, r.err = input.ReadSlice(0x0a) channel <- r } }()
Ce code déclenchera une erreur de compilation : "attendu expression booléenne ou de plage, instruction simple trouvée (parenthèses manquantes autour du littéral composite ?)". L'ambiguïté survient parce que l'accolade ouvrante { peut être interprétée soit comme le début d'un littéral composite, soit comme l'accolade ouvrante du bloc for.
Pour résoudre cette ambiguïté, placez l'expression struct entre parenthèses, en indiquant clairement que c'est un littéral composite :
for r := (Request{}); r.err == nil; r.id++ { r.line, r.err = input.ReadSlice(0x0a) channel <- r }
Avec ce changement, le code sera compilé avec succès et exécuté comme prévu, initialisant la variable locale r avec une nouvelle structure Request et en incrémentant sa valeur d'identification à chaque itération.
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!