Maison > développement back-end > Golang > Pourquoi Go génère-t-il une erreur lors de l'initialisation d'une structure dans une boucle For ?

Pourquoi Go génère-t-il une erreur lors de l'initialisation d'une structure dans une boucle For ?

Barbara Streisand
Libérer: 2024-12-31 17:48:09
original
405 Les gens l'ont consulté

Why Does Go Throw an Error When Initializing a Struct in a For Loop?

Confusion avec Struct dans l'initialiseur de boucle For

Dans Go, une erreur de syntaxe survient lors de l'initialisation d'une structure dans une boucle for. Utiliser un pointeur vers une structure fonctionne bien, mais des variables locales sont parfois nécessaires. Cet article approfondit le problème et propose une solution.

L'extrait de code problématique :

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

En simplifiant le code, nous obtenons :

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

Ce code résulte dans l'erreur suivante :

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

L'erreur provient de l'ambiguïté dans l'analyse de l'accolade ouvrante ('{'). Il peut faire partie d'un littéral composite ou du début du bloc for.

Pour résoudre cette ambiguïté, des parenthèses sont ajoutées 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

En entourant l'initialisation de la structure entre parenthèses, nous indiquons explicitement qu'il s'agit d'un littéral composite et ne fait pas partie de la syntaxe de la boucle for.

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