Rumah >pembangunan bahagian belakang >Golang >Mengapa Pengkompil Go Saya Menunjukkan Ralat 'Diisytiharkan tetapi Tidak Digunakan' untuk Pembolehubah yang Saya Gunakan?

Mengapa Pengkompil Go Saya Menunjukkan Ralat 'Diisytiharkan tetapi Tidak Digunakan' untuk Pembolehubah yang Saya Gunakan?

Patricia Arquette
Patricia Arquetteasal
2024-12-15 00:09:16183semak imbas

Why Does My Go Compiler Show

Go Compiler: Ralat Diisytiharkan tetapi Tidak Digunakan untuk Pembolehubah Yang Akan Digunakan

Isu:

Apabila menyusun Go fungsi, pengkompil menandakan beberapa pembolehubah sebagai "diisytiharkan dan tidak digunakan," walaupun pembolehubah itu jelas digunakan dalam kod.

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

Pengkompil menjana amaran untuk:

  • m
  • err
  • kunci

Penyelesaian:

Sebagai ditunjukkan oleh @kostix, ralat timbul kerana pembolehubah m ditakrifkan dalam skop pernyataan if. Untuk menyelesaikan masalah ini, alihkan pengisytiharan m ke skop fungsi, memastikan ia boleh diakses sepanjang keseluruhan fungsi:

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

Kini, pembolehubah m diisytiharkan sekali dan digunakan dalam kedua-dua cabang if, membetulkan pengkompil ketidakpadanan yang dirasakan. Selain itu, amaran pengkompil untuk ralat dan kunci juga harus hilang kerana ia juga digunakan dalam fungsi.

Atas ialah kandungan terperinci Mengapa Pengkompil Go Saya Menunjukkan Ralat 'Diisytiharkan tetapi Tidak Digunakan' untuk Pembolehubah yang Saya Gunakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn