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 ?

Pourquoi une boucle Go `for` échoue-t-elle avec un initialiseur d'expression Struct et comment peut-elle être corrigée ?

DDD
Libérer: 2024-12-31 15:20:11
original
410 Les gens l'ont consulté

Why Does a Go `for` Loop Fail with a Struct Expression Initializer, and How Can It Be Fixed?

Expression struct dans l'initialiseur de boucle For

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
    }
}()
Copier après la connexion

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
}
Copier après la connexion

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal