Maison > Article > développement back-end > Pourquoi Go renvoie-t-il une erreur « déclarée et non utilisée » même lorsqu'une variable semble être initialisée ?
Lorsqu'ils rencontrent une erreur « Déclaré et non utilisé » dans Go, les programmeurs peuvent supposer qu'ils ont déjà initialisé une variable dans leur code. Cependant, comme illustré ci-dessous, la cause première peut résider dans la déclaration prématurée des variables.
Considérez l'extrait de code suivant :
<code class="go">package main import "fmt" // fibonacci is a function that returns // a function that returns an int. func fibonacci() func() int { var prev int // Declare a variable named prev var curr = 1 // Initialize curr with the value 1 return func() int { var temp = curr // Declare a variable named temp curr := curr + prev // Assign curr to the sum of curr and prev prev := temp // Assign prev to the value of temp return curr } } func main() { f := fibonacci() for i := 0; i < 10; i++ { fmt.Println(f()) } }</code>
Ce code est conçu pour générer une séquence de nombres de Fibonacci. . Cependant, nous rencontrons une erreur indiquant "prog.go:13 : prev déclaré et non utilisé."
Pour résoudre cette erreur, nous devons comprendre la différence entre la déclaration de variable et l'initialisation. Dans ce code, nous déclarons une variable nommée prev avec la ligne var prev int, indiquant qu'elle contiendra une valeur entière. Cependant, nous ne l'initialisons pas avec une valeur réelle. L'affectation prev := temp, qui se produit plus tard dans le code, crée une nouvelle variable locale nommée prev dans la portée actuelle, masquant la variable prev externe. Par conséquent, la variable prev d'origine reste non initialisée.
Pour remédier à ce problème, nous pouvons remplacer la déclaration prev := temp par une affectation prev = temp, qui modifie la variable prev héritée de la portée environnante. De plus, nous devrions réviser l'affectation curr := curr prev sur la ligne précédente pour utiliser = au lieu de :=, garantissant une affectation correcte des variables. Le code corrigé est présenté ci-dessous :
<code class="go">package main import "fmt" // fibonacci is a function that returns // a function that returns an int. func fibonacci() func() int { var prev, curr int // Declare and initialize prev and curr within the function scope return func() int { var temp = curr curr = curr + prev prev = temp return curr } } func main() { f := fibonacci() for i := 0; i < 10; i++ { fmt.Println(f()) } }</code>
Ce code corrigé élimine la déclaration prématurée de prev et garantit une initialisation correcte des variables, résolvant l'erreur "déclaré et non utilisé".
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!