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
Barbara Streisandoriginal
2024-12-31 17:48:09391parcourir

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
}

En simplifiant le code, nous obtenons :

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

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)

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
}

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!

Déclaration:
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