首頁 > 後端開發 > Golang > 為什麼我的 Go 編譯器會對我正在使用的變數顯示'已聲明但未使用”錯誤?

為什麼我的 Go 編譯器會對我正在使用的變數顯示'已聲明但未使用”錯誤?

Patricia Arquette
發布: 2024-12-15 00:09:16
原創
183 人瀏覽過

Why Does My Go Compiler Show

Go 編譯器:對於要使用的變量出現聲明但未使用的錯誤

問題:

編譯 Go時函數中,編譯器將幾個變數標記為“宣告但未使用”,儘管這些變數在函數中明確使用code.

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)
}
登入後複製

編譯器產生警告對於:

  • m
  • err
  • key

解決方案:

tix@koss>解決方案:

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)
}
登入後複製

作為tix@koss>解決方案因為變數m 是在 if 的範圍內定義的 陳述。要解決此問題,請將m 的聲明移至函數的作用域,確保它可以在整個函數中存取:

現在,變數m 被聲明一次並在兩個if 分支中使用,從而修正了編譯器的感知到的不匹配。此外,針對 err 和 key 的編譯器警告也應該消失,因為它們也在函數內使用。

以上是為什麼我的 Go 編譯器會對我正在使用的變數顯示'已聲明但未使用”錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板