次の Go コードでは、コンパイラーは変数 prev で「宣言済みかつ未使用」のエラーを報告します。
<code class="go">package main import "fmt" // fibonacci is a function that returns // a function that returns an int. func fibonacci() func() int { prev := 0 curr := 1 return func() int { temp := curr curr := curr + prev prev := temp return curr } } func main() { f := fibonacci() for i := 0; i < 10; i++ { fmt.Println(f()) } }</code>
コンパイラは、変数 prev が宣言されているが使用されていないことを正しく識別します。これは、関数 fibonacci で宣言された prev 変数がコード内で決して参照されないことを意味します。
このエラーは、prev 変数を正しく使用するように fibonacci 関数を変更することで解決できます。コードの意図は、prev := temp 割り当てを使用して prev 変数を変更する可能性があります。ただし、この割り当てにより、周囲のスコープから隠蔽される prev という名前の新しいローカル変数が作成されます。代わりに、正しい代入では、宣言キーワードなしで = 演算子を使用する必要があります。
<code class="go">func fibonacci() func() int { prev := 0 curr := 1 return func() int { temp := curr curr := curr + prev prev = temp return curr } }</code>
2 番目の prev 代入から宣言キーワード (:=) を削除することで、コードは継承された prev 変数を正しく変更します。これによりコンパイラ エラーが解決され、コードが意図したとおりに機能できるようになります。
以上がGo コードが「prev」変数を使用しているにもかかわらず、「宣言されており使用されていません」というエラーを報告するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。