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) }
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]) }
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]) }
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!