>백엔드 개발 >Golang >내 Go 컴파일러가 사용 중인 변수에 대해 '선언되었지만 사용되지 않음' 오류를 표시하는 이유는 무엇입니까?

내 Go 컴파일러가 사용 중인 변수에 대해 '선언되었지만 사용되지 않음' 오류를 표시하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-15 00:09:16187검색

Why Does My Go Compiler Show

Go 컴파일러: 사용하려는 변수에 대해 선언되었지만 사용되지 않은 오류

문제:

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:

  • m
  • err
  • key

해결책:

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.