Maison >développement back-end >Golang >Pourquoi l'utilisation d'une structure dans un initialiseur de boucle Go For provoque-t-elle une erreur de compilation ?

Pourquoi l'utilisation d'une structure dans un initialiseur de boucle Go For provoque-t-elle une erreur de compilation ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-31 06:16:081028parcourir

Why Does Using a Struct in a Go For Loop Initializer Cause a Compile-Time Error?

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!

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