실제 사용에도 불구하고 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) }
오류 include:
그러나 자세히 살펴보면 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을 함수 범위 변수로 만들면 전체 함수 전체에서 m에 액세스하고 사용할 수 있습니다. 사용됨' 오류가 발생했습니다.
위 내용은 변수가 사용되었음에도 불구하고 내 Go 코드에서 '변수가 선언되었지만 사용되지 않음' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!