Rumah >pembangunan bahagian belakang >Golang >Mengapa Pembolehubah Ralat Dimulakan Secara Global Saya Kekal Tiada dalam Fungsi Lain?
Pembolehubah Ralat Global Kekal Tiada Selepas Permulaan
Masalah
Apabila memulakan pembolehubah ralat secara global , ia kekal sifar dalam fungsi lain dalam pakej yang sama. Ini boleh menghalang keadaan panik daripada dicetuskan seperti yang dijangkakan.
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) } }
Jawapan
Isu timbul kerana loadErr pembolehubah dalam fungsi utama ialah pembolehubah tempatan baharu . Pembolehubah global tidak pernah diberikan nilai. Untuk membetulkannya, tugasan pembolehubah harus dipermudahkan:
func main() { _, loadErr = os.Open("asdasd")
Dengan menggunakan =, loadErr pembolehubah global akan dimulakan dan sebarang ralat seterusnya akan disebarkan dengan betul.
Pertimbangan Tambahan
Jika anda ingin mengekalkan nilai pulangan daripada os.Open, anda perlu mengisytiharkan pembolehubah kedua:
var f *os.File f, loadErr = os.Open("asdasd")
Dalam kes ini, := tidak boleh digunakan kerana ia akan mencipta pembolehubah tempatan dan mengabaikan pembolehubah global.
Atas ialah kandungan terperinci Mengapa Pembolehubah Ralat Dimulakan Secara Global Saya Kekal Tiada dalam Fungsi Lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!