変数が初期化されているように見える場合でも、Go が「宣言されていますが使用されていません」というエラーをスローするのはなぜですか?

DDD
リリース: 2024-10-31 23:43:28
オリジナル
118 人が閲覧しました

Why does Go throw a

Go での「宣言されているが使用されていない」エラー: 未解決の時期尚早な変数宣言

Go で「宣言されているが使用されていない」エラーが発生した場合、プログラマは、Go で「宣言されているが使用されていない」エラーが発生したと考える可能性があります。コード内ですでに変数を初期化しています。ただし、以下に示すように、根本原因は変数の時期尚早な宣言にある可能性があります。

次のコード スニペットを考えてみましょう:

<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>
ログイン後にコピー

このコードは、フィボナッチ数列を生成するように設計されています。 。ただし、「prog.go:13: prev は宣言されており、使用されていません。」というエラーが発生します。

このエラーを解決するには、変数の宣言と初期化の違いを理解する必要があります。このコードでは、var prev int という行で prev という名前の変数を宣言し、整数値を保持することを示しています。ただし、実際の値で初期化することはありません。コードの後半で発生する割り当て prev := temp は、現在のスコープ内に prev という名前の新しいローカル変数を作成し、外側の prev 変数をシャドウします。その結果、元の prev 変数は初期化されないままになります。

この問題を修正するには、宣言 prev := temp を代入 prev = temp に置き換えます。これにより、周囲のスコープから継承された prev 変数が変更されます。さらに、前の行の割り当て curr := curr prev を修正して、:= の代わりに = を使用し、適切な変数割り当てを確保する必要があります。修正されたコードを以下に示します。

<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>
ログイン後にコピー

この修正されたコードは、prev の時期尚早な宣言を排除し、変数の適切な初期化を保証し、「宣言されているが使用されていない」エラーを解決します。

以上が変数が初期化されているように見える場合でも、Go が「宣言されていますが使用されていません」というエラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!