Warum gibt Go einen Fehler „deklariert und nicht verwendet' aus, selbst wenn eine Variable initialisiert zu sein scheint?

DDD
Freigeben: 2024-10-31 23:43:28
Original
183 Leute haben es durchsucht

Why does Go throw a

Fehler „Deklariert und nicht verwendet“ in Go: Ungelöste vorzeitige Variablendeklaration

Wenn in Go ein Fehler „Deklariert und nicht verwendet“ auftritt, können Programmierer davon ausgehen, dass dies der Fall ist haben bereits eine Variable in ihrem Code initialisiert. Wie unten dargestellt, kann die Ursache jedoch in der vorzeitigen Deklaration von Variablen liegen.

Bedenken Sie den folgenden Codeausschnitt:

<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>
Nach dem Login kopieren

Dieser Code dient dazu, eine Folge von Fibonacci-Zahlen zu generieren . Wir stoßen jedoch auf einen Fehler mit der Meldung „prog.go:13: prev deklariert und nicht verwendet“.

Um diesen Fehler zu beheben, müssen wir den Unterschied zwischen Variablendeklaration und Initialisierung verstehen. In diesem Code deklarieren wir eine Variable mit dem Namen prev mit der Zeile var prev int, was angibt, dass sie einen ganzzahligen Wert enthält. Wir initialisieren es jedoch nicht mit einem tatsächlichen Wert. Die Zuweisung prev := temp, die später im Code erfolgt, erstellt eine neue lokale Variable mit dem Namen prev im aktuellen Bereich und überschattet die äußere Variable prev. Folglich bleibt die ursprüngliche prev-Variable nicht initialisiert.

Um dieses Problem zu beheben, können wir die Deklaration prev := temp durch eine Zuweisung prev = temp ersetzen, die die vom umgebenden Bereich geerbte prev-Variable ändert. Darüber hinaus sollten wir die Zuweisung curr := curr prev in der vorherigen Zeile überarbeiten, um = anstelle von := zu verwenden, um eine ordnungsgemäße Variablenzuweisung sicherzustellen. Der korrigierte Code ist unten dargestellt:

<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>
Nach dem Login kopieren

Dieser korrigierte Code beseitigt die vorzeitige Deklaration von prev und stellt eine ordnungsgemäße Variableninitialisierung sicher, wodurch der Fehler „deklariert und nicht verwendet“ behoben wird.

Das obige ist der detaillierte Inhalt vonWarum gibt Go einen Fehler „deklariert und nicht verwendet' aus, selbst wenn eine Variable initialisiert zu sein scheint?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage