ホームページ  >  記事  >  バックエンド開発  >  Go コードが「prev」変数を使用しているにもかかわらず、「宣言されており使用されていません」というエラーを報告するのはなぜですか?

Go コードが「prev」変数を使用しているにもかかわらず、「宣言されており使用されていません」というエラーを報告するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-31 20:14:02153ブラウズ

Why Does My Go Code  Report a

変数の使用にもかかわらず、Go で宣言済みかつ未使用のエラーが発生する

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。