Dalam kod Go yang disediakan, dalam fungsi utama, nama pembolehubah tempatan ditakrifkan, yang membayangi pemalar atau pembolehubah peringkat pakej dengan nama yang sama. Ini boleh membawa kepada kekeliruan dan tingkah laku yang salah.
Dalam Go, apabila pembolehubah baharu diisytiharkan dalam fungsi, ia mengambil keutamaan berbanding mana-mana pembolehubah lain dengan nama yang sama ditakrifkan pada tahap yang lebih tinggi (cth., dalam skop peringkat pakej). Ini dikenali sebagai pembayang boleh ubah.
Untuk merujuk kepada nama pembolehubah tahap pemalar atau pakej dalam fungsi utama, kami tidak boleh menggunakan nama pengecam secara langsung kerana ia menandakan fungsi pembolehubah peringkat. Sebaliknya, kita boleh menggunakan salah satu pendekatan berikut:
const name = "Yosua" func main() { localName := name name := "Jobs" fmt.Println(name) // Jobs fmt.Println(localName) // Yosua }
const name = "Yosua" func getName() string { return name } func main() { name := "Jobs" fmt.Println(name) // Jobs fmt.Println(getName()) // Yosua }
Jika pembolehubah peringkat pakej diisytiharkan menggunakan var dan bukannya const, ia boleh dibayangi dan ditetapkan semula dalam fungsi. Dalam kes sedemikian, menggunakan salah satu pendekatan di atas memastikan nilai asal dikekalkan.
Atas ialah kandungan terperinci Bagaimana untuk Mengakses Pemalar dan Pembolehubah Tahap Pakej Apabila Dibayangi oleh Pembolehubah Tempatan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!