Rumah > pembangunan bahagian belakang > Golang > Mengapa Pembolehubah Ralat Global Go Saya Kekal Tiada Selepas Permulaan?

Mengapa Pembolehubah Ralat Global Go Saya Kekal Tiada Selepas Permulaan?

Susan Sarandon
Lepaskan: 2024-12-11 19:10:16
asal
501 orang telah melayarinya

Why Does My Go Global Error Variable Remain Nil After Initialization?

Pembolehubah Ralat Global Kekal Sifar Selepas Permulaan

Apabila cuba untuk memulakan pembolehubah ralat secara global, sesetengah pengguna mungkin menghadapi isu yang membingungkan di mana pembolehubah kekal sifar dalam fungsi berikutnya dalam pakej yang sama, membawa kepada tingkah laku program yang tidak dijangka. Isu ini berpunca daripada cara pembolehubah global dimulakan dalam Go.

Dalam contoh berikut, matlamatnya ialah untuk memulakan pembolehubah ralat global loadErr dan menyemak ralat dalam fungsi checkErr():

package main

import (
    "os"
    "fmt"
)

var loadErr error

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

// panic won't be called because loadErr is nil
func checkErr() {
    if loadErr != nil {
        panic(loadErr)
    }
}
Salin selepas log masuk

Walau bagaimanapun, isu timbul kerana checkErr() menerima nilai nil untuk loadErr. Ini kerana pembolehubah yang dicipta dalam main() ("loadErr := os.Open('asdasd')") ialah pembolehubah setempat dalam main(), dan pembolehubah global tidak dimulakan pada ketika ini.

Untuk menyelesaikan isu ini, seseorang harus menggunakan tugasan mudah ("=") dan bukannya pengisytiharan dan permulaan (":=") apabila memberikan nilai kepada global pembolehubah:

// ...

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

Dengan menggunakan operator "=", pembolehubah global loadErr` secara eksplisit diberikan nilai ralat, memastikan ia boleh diakses oleh fungsi lain dalam pakej.

Atas ialah kandungan terperinci Mengapa Pembolehubah Ralat Global Go Saya Kekal Tiada Selepas Permulaan?. 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