Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah Go membuang ralat \"diisytiharkan dan tidak digunakan\" walaupun apabila pembolehubah kelihatan dimulakan?

Mengapakah Go membuang ralat \"diisytiharkan dan tidak digunakan\" walaupun apabila pembolehubah kelihatan dimulakan?

DDD
DDDasal
2024-10-31 23:43:28118semak imbas

Why does Go throw a

Ralat "Diisytiharkan dan Tidak Digunakan" dalam Go: Pengisytiharan Pembolehubah Pramatang Tidak Selesai

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!

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