Apabila menghadapi ralat "diisytiharkan dan tidak digunakan" dalam Go, pengaturcara mungkin menganggap mereka mempunyai sudah memulakan pembolehubah dalam kod mereka. Walau bagaimanapun, seperti yang digambarkan di bawah, punca utama mungkin terletak pada pengisytiharan pembolehubah pramatang.
Pertimbangkan coretan kod berikut:
<code class="go">package main import "fmt" // fibonacci is a function that returns // a function that returns an int. func fibonacci() func() int { var prev int // Declare a variable named prev var curr = 1 // Initialize curr with the value 1 return func() int { var temp = curr // Declare a variable named temp curr := curr + prev // Assign curr to the sum of curr and prev prev := temp // Assign prev to the value of temp return curr } } func main() { f := fibonacci() for i := 0; i < 10; i++ { fmt.Println(f()) } }</code>
Kod ini direka bentuk untuk menjana jujukan nombor Fibonacci . Walau bagaimanapun, kami menghadapi ralat yang menyatakan "prog.go:13: prev declared and not used."
Untuk menyelesaikan ralat ini, kita perlu memahami perbezaan antara pengisytiharan pembolehubah dan permulaan. Dalam kod ini, kami mengisytiharkan pembolehubah bernama prev dengan baris var prev int, menunjukkan bahawa ia akan memegang nilai integer. Walau bagaimanapun, kami tidak memulakannya dengan nilai sebenar. Tugasan prev := temp, yang berlaku kemudian dalam kod, mencipta pembolehubah tempatan baharu bernama prev dalam skop semasa, membayangi pembolehubah prev luar. Akibatnya, pembolehubah prev asal kekal tidak dimulakan.
Untuk membetulkan isu ini, kita boleh menggantikan perisytiharan prev := temp dengan tugasan prev = temp, yang mengubah suai pembolehubah prev yang diwarisi daripada skop sekeliling. Selain itu, kita harus menyemak semula tugasan curr := curr prev pada baris sebelumnya untuk menggunakan = bukannya :=, memastikan penetapan pembolehubah yang betul. Kod yang diperbetulkan ditunjukkan di bawah:
<code class="go">package main import "fmt" // fibonacci is a function that returns // a function that returns an int. func fibonacci() func() int { var prev, curr int // Declare and initialize prev and curr within the function scope return func() int { var temp = curr curr = curr + prev prev = temp return curr } } func main() { f := fibonacci() for i := 0; i < 10; i++ { fmt.Println(f()) } }</code>
Kod yang diperbetulkan ini menghapuskan pengisytiharan pramatang sebelumnya dan memastikan pengamulaan pembolehubah yang betul, menyelesaikan ralat "diisytiharkan dan tidak digunakan".
Atas ialah kandungan terperinci Mengapakah Go membuang ralat \'diisytiharkan dan tidak digunakan\' walaupun apabila pembolehubah kelihatan dimulakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!