首頁 >後端開發 >Golang >為什麼我的 Go 程式碼即使使用了變數也會產生「變數已宣告但未使用」錯誤?

為什麼我的 Go 程式碼即使使用了變數也會產生「變數已宣告但未使用」錯誤?

Patricia Arquette
Patricia Arquette原創
2024-12-14 22:18:19432瀏覽

Why Does My Go Code Produce

儘管實際使用,Go 編譯器仍出現「變數已宣告但未使用」錯誤

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)
}

錯誤包含:

  • dpcompare.go:171: m 宣告但未使用
  • dpcompare.go:171: err聲明但未使用
  • dpcompare.go:173 : m聲明但未使用
  • dpcompare.go:173:錯誤聲明但未使用
  • dpcompare.go:178:未定義:m
  • dpcompare.go:185:聲明密鑰但未使用

但是,在接近時檢查後,很明顯變數m、err 和key 確實被

原因和解決方案

正如@kostix所指出的,問題在於m的範圍。在給定的程式碼中,m 在 if 和 else 語句的範圍內宣告。為了解決這個問題,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! now m is 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 成為函數範圍的變量,可以在整個函數中存取和使用它,解決了「聲明而不是聲明」的問題。使用”錯誤。

以上是為什麼我的 Go 程式碼即使使用了變數也會產生「變數已宣告但未使用」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn