問題:
編譯 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) }
編譯器產生警告對於:
解決方案:
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中文網其他相關文章!