ホームページ >バックエンド開発 >Golang >Go コンパイラで、使用している変数に対して「宣言されていますが使用されていません」というエラーが表示されるのはなぜですか?

Go コンパイラで、使用している変数に対して「宣言されていますが使用されていません」というエラーが表示されるのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-15 00:09:16183ブラウズ

Why Does My Go Compiler Show

Go コンパイラ: 使用されるはずの変数の宣言されているが使用されていないエラー

問題:

Go のコンパイル時関数を使用すると、コンパイラは、変数がコード内で明らかに使用されています。

func img(w http.ResponseWriter, r *http.Request, c appengine.Context, u *user.User) {
  key := datastore.NewKey("Comparison", r.FormValue("id"), 0, nil)
  side := r.FormValue("side")
  comparison := new(Comparison)
  err := datastore.Get(c, key, comparison)
  check(err)

  var m Image
  if( side == "left"){
    m, _, err := image.Decode(bytes.NewBuffer(comparison.Left))
  } else {
    m, _, err := image.Decode(bytes.NewBuffer(comparison.Right))
  }
  check(err)

  w.Header().Set("Content-type", "image/jpeg")
  jpeg.Encode(w, m, nil)
}

コンパイラは警告を生成しますfor:

  • m
  • err
  • key

解決策:

として@kostixによって指摘されたように、変数mがifのスコープ内で定義されているためにエラーが発生します 声明。これを解決するには、m の宣言を関数のスコープに移動し、関数全体を通してアクセスできるようにします。

func img(w http.ResponseWriter, r *http.Request, c appengine.Context, u *user.User) {
  key := datastore.NewKey("Comparison", r.FormValue("id"), 0, nil)
  side := r.FormValue("side")
  comparison := new(Comparison)
  err := datastore.Get(c, key, comparison)
  check(err)

  // Declare m in the function's scope
  var m Image
  if( side == "left"){
    m, _, err := image.Decode(bytes.NewBuffer(comparison.Left))
  } else {
    m, _, err := image.Decode(bytes.NewBuffer(comparison.Right))
  }
  check(err)

  w.Header().Set("Content-type", "image/jpeg")
  jpeg.Encode(w, m, nil)
}

今度は、変数 m が 1 回宣言され、両方の if 分岐内で使用され、コンパイラの動作が修正されます。認識された不一致。さらに、err と key は関数内でも使用されているため、コンパイラの警告も表示されなくなります。

以上がGo コンパイラで、使用している変数に対して「宣言されていますが使用されていません」というエラーが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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