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

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

Mary-Kate Olsen
リリース: 2024-10-31 20:14:02
オリジナル
266 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート