Rumah > Artikel > pembangunan bahagian belakang > Mengapa Kod My Go Melaporkan Ralat \"Diisytiharkan dan Tidak Digunakan\" pada Pembolehubah `sebelumnya` Walaupun Penggunaannya?
Dalam kod Go berikut, pengkompil melaporkan ralat "diisytiharkan dan tidak digunakan" pada pembolehubah sebelumnya.
<code class="go">package main import "fmt" // fibonacci is a function that returns // a function that returns an int. func fibonacci() func() int { prev := 0 curr := 1 return func() int { temp := curr curr := curr + prev prev := temp return curr } } func main() { f := fibonacci() for i := 0; i < 10; i++ { fmt.Println(f()) } }</code>
Pengkompil dengan betul mengenal pasti bahawa pembolehubah sebelumnya diisytiharkan tetapi tidak digunakan. Ini bermakna pembolehubah prev yang diisytiharkan dalam fungsi fibonacci tidak pernah dirujuk dalam kod.
Ralat boleh diselesaikan dengan mengubah suai fungsi fibonacci untuk menggunakan pembolehubah terdahulu dengan betul. Niat kod berkemungkinan mengubah suai pembolehubah prev dengan prev := temp assignment. Walau bagaimanapun, tugasan ini mencipta pembolehubah tempatan baharu bernama prev yang disembunyikan daripada skop sekeliling. Sebaliknya, tugasan yang betul harus menggunakan operator = tanpa kata kunci pengisytiharan:
<code class="go">func fibonacci() func() int { prev := 0 curr := 1 return func() int { temp := curr curr := curr + prev prev = temp return curr } }</code>
Dengan mengalih keluar kata kunci pengisytiharan (:=) daripada tugasan sebelumnya kedua, kod tersebut mengubah suai pembolehubah terdahulu yang diwarisi dengan betul. Ini menyelesaikan ralat pengkompil dan membenarkan kod berfungsi seperti yang dimaksudkan.
Atas ialah kandungan terperinci Mengapa Kod My Go Melaporkan Ralat \"Diisytiharkan dan Tidak Digunakan\" pada Pembolehubah `sebelumnya` Walaupun Penggunaannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!