ホームページ > バックエンド開発 > Golang > Go コンパイラーは、明らかに使用されている変数に未使用のフラグを付けるのはなぜですか?

Go コンパイラーは、明らかに使用されている変数に未使用のフラグを付けるのはなぜですか?

Patricia Arquette
リリース: 2024-12-17 11:34:24
オリジナル
634 人が閲覧しました

Why Does My Go Compiler Flag Variables as Unused When They Are Clearly Used?

コンパイラは、使用されている変数に未使用としてフラグを立てます

Go では、次の場合でも、「宣言されているが使用されていない」というエラーが発生することがあります。問題の変数は明らかに利用されています。これは複雑かもしれませんが、多くの場合、解決策は変数のスコープを理解することにあります。

次の関数でこのようなエラーが発生しました:

type Comparison struct {
        Left []byte
        Right []byte
        Name string
}

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)

  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 と err に未使用のフラグを立てました。彼らの明らかな使用法。この問題を解決する鍵は、変数 m のスコープが if ステートメント内にあることを認識することです。このスコープ外で m を使用するには、関数レベルで宣言する必要があります。

次の改訂されたコードは、この問題に対処しています:

type Comparison struct {
        Left []byte
        Right []byte
        Name string
}

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)

  // Note: m is now declared at the function level
  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)
}
ログイン後にコピー

以上がGo コンパイラーは、明らかに使用されている変数に未使用のフラグを付けるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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