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
Lepaskan: 2024-12-15 00:09:16
asal
183 orang telah melayarinya

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)
}
Salin selepas log masuk

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)
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan