Maison > développement back-end > Golang > Pourquoi le rapport du compilateur Go est-il « déclaré mais non utilisé » pour une variable d'erreur utilisée dans une boucle ?

Pourquoi le rapport du compilateur Go est-il « déclaré mais non utilisé » pour une variable d'erreur utilisée dans une boucle ?

Linda Hamilton
Libérer: 2024-12-19 14:59:13
original
413 Les gens l'ont consulté

Why Does Go's Compiler Report

Confusion du compilateur dans Go : comprendre les variables déclarées mais inutilisées

Dans Go, le compilateur joue un rôle crucial pour garantir l'exactitude du code. Parfois, cependant, il peut signaler des erreurs qui semblent déroutantes à première vue, telles que « variable déclarée mais non utilisée ». Examinons un exemple spécifique pour découvrir la cause première de ce problème.

Exemple : variable d'erreur déclarée mais inutilisée dans les opérations d'E/S

Considérez l'extrait de code suivant qui utilise le package io :

func main() {
    readers := []io.Reader{
         strings.NewReader("from string reader"),
         bytes.NewBufferString("from bytes reader"),
    }

    reader := io.MultiReader(readers...)
    data := make([]byte, 1024)

    var err error
    //var n int

    for err != io.EOF {
        n, err := reader.Read(data)
        fmt.Printf("%s\n", data[:n])
    }
    os.Exit(0)
}
Copier après la connexion

Le compilateur signale une erreur : "erreur déclarée et non utilisée." Cependant, le code utilise la variable err dans l'instruction for, cette erreur semble donc contre-intuitive.

Ombrage et déclarations de variables dans Go

La clé pour comprendre le problème réside dans l'utilisation de := dans la boucle for. Cette syntaxe déclare une nouvelle variable d'erreur dans la portée de la boucle, qui masque l'erreur d'origine déclarée en dehors de la boucle. En conséquence, le compilateur ne suit plus la variable err d'origine, d'où l'erreur "déclarée mais non utilisée".

Résolution du problème

Pour résoudre le problème, on peut mentionner explicitement les deux variables err dans la portée de la boucle :

for var err error; err != io.EOF; {
        n, err := reader.Read(data)
        fmt.Printf("%s\n", data[:n])
    }
Copier après la connexion

Alternativement, on peut éviter le problème d'observation en utilisant un nom de variable différent pour le portée de boucle, telle que loopErr :

for loopErr := err; loopErr != io.EOF; {
        n, loopErr := reader.Read(data)
        fmt.Printf("%s\n", data[:n])
    }
Copier après la connexion

En résolvant le problème d'observation, l'erreur du compilateur est éliminée et le code fonctionne comme prévu.

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