Rumah > pembangunan bahagian belakang > Golang > Mengapa Ralat Global Saya Tidak Berubah Panik Selepas Permulaan dalam Go?

Mengapa Ralat Global Saya Tidak Berubah Panik Selepas Permulaan dalam Go?

Susan Sarandon
Lepaskan: 2024-12-11 13:51:12
asal
178 orang telah melayarinya

Why Doesn't My Global Error Variable Panic After Initialization in Go?

Mengapa Pembolehubah Ralat Global Tidak Panik Selepas Permulaan?

Apabila memulakan pembolehubah ralat global, ia mungkin kelihatan tidak berubah kepada fungsi dalam pakej yang sama. Percanggahan ini timbul daripada salah faham skop pembolehubah.

Skop dan Permulaan

Dalam contoh pertama anda, anda menggunakan := untuk memulakan kedua-dua f dan loadErr dalam fungsi utama:

func main() {
    f, loadErr := os.Open("asdasd")
    if loadErr != nil {
        checkErr()
    }
    if f != nil {
        fmt.Println(f.Name())
    }
}
Salin selepas log masuk

Barisan ini mencipta pembolehubah tempatan baharu untuk f dan loadErr. Ia tidak mengubah suai pembolehubah global yang ditakrifkan di luar fungsi. Oleh itu, apabila anda memanggil checkErr(), loadErr masih sifar kerana ia belum ditetapkan di mana-mana dalam skop fungsi utama.

Menetapkan Pembolehubah Global

Dalam contoh kedua anda, anda use = untuk menetapkan nilai loadErr kepada ralat yang dikembalikan oleh os.Open():

func main() {
    _, err := os.Open("asdasd")
    loadErr = err
    if loadErr != nil {
        checkErr()
    }
}
Salin selepas log masuk

Dengan menggunakan =, anda secara eksplisit memberikan nilai pembolehubah ralat tempatan kepada pembolehubah loadErr global. Ini membenarkan fungsi checkErr() untuk mengakses pembolehubah global yang diubah suai dan mencetuskan panik.

Mengelakkan Membayangkan

Untuk mengelakkan secara tidak sengaja mewujudkan pembolehubah tempatan yang membayangi pembolehubah global, adalah penting untuk mengisytiharkan pembolehubah global secara eksplisit sebelum memberikan nilai. Dalam contoh pertama, anda boleh mengisytiharkan loadErr sebagai pembolehubah global di luar fungsi utama dengan mengalihkan takrifnya:

var loadErr error

func main() {
    _, loadErr = os.Open("asdasd")
    if loadErr != nil {
        checkErr()
    }
    if f != nil {
        fmt.Println(f.Name())
    }
}
Salin selepas log masuk

Ini memastikan pembolehubah global loadErr boleh diakses dan dikemas kini sepanjang program.

Atas ialah kandungan terperinci Mengapa Ralat Global Saya Tidak Berubah Panik Selepas Permulaan dalam Go?. 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