Maison > développement back-end > Golang > le corps du texte

Pourquoi Go renvoie-t-il une erreur « déclarée et non utilisée » même lorsqu'une variable semble être initialisée ?

DDD
Libérer: 2024-10-31 23:43:28
original
124 Les gens l'ont consulté

Why does Go throw a

Erreur « Déclaré et non utilisé » dans Go : déclaration de variable prématurée non résolue

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

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

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!

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!