컴파일러 변수가 사용 중일 때 사용되지 않음으로 플래그 지정
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!