문제:
Go를 컴파일할 때 함수 내에서 변수가 명확하게 활용되고 있음에도 불구하고 컴파일러는 여러 변수를 "선언되었지만 사용되지 않음"으로 플래그를 지정합니다. 코드입니다.
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) }
컴파일러가 경고를 생성합니다. for:
해결책:
As @kostix가 지적한 대로 변수 m이 다음 범위 내에서 정의되었기 때문에 오류가 발생합니다. if 문. 이 문제를 해결하려면 m 선언을 함수 범위로 이동하여 전체 함수에서 액세스할 수 있는지 확인하세요.
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) }
이제 변수 m은 한 번 선언되고 두 if 분기 내에서 사용되어 컴파일러의 불일치가 감지되었습니다. 또한 오류 및 키에 대한 컴파일러 경고도 함수 내에서 사용되므로 사라져야 합니다.
위 내용은 내 Go 컴파일러가 사용 중인 변수에 대해 '선언되었지만 사용되지 않음' 오류를 표시하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!