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 サイトの他の関連記事を参照してください。