Dalam Go, skop pembolehubah menentukan kebolehaksesannya dalam blok kod yang berbeza. Apabila pembolehubah tempatan dan pemalar peringkat atas atau pembolehubah peringkat pakej berkongsi nama yang sama, isu biasa timbul: bagaimana untuk merujuk kepada pembolehubah peringkat pemalar atau pakej dan bukannya yang setempat?
Pertimbangkan program Go berikut:
package main import "fmt" const name = "Yosua" // or var name string = "James" func main() { name := "Jobs" fmt.Println(name) }
Program ini mengisytiharkan nama tetap pada peringkat pakej, tetapi dalam fungsi utama, nama pembolehubah lain yang dinamakan diisytiharkan pada tahap fungsi. Apabila program berjalan, ia mencetak "Pekerjaan", yang merupakan nilai nama pembolehubah peringkat fungsi setempat. Bagaimanakah anda boleh mengakses nama pemalar peringkat pakej sebaliknya?
Malangnya, Go tidak menyediakan cara langsung untuk merujuk kepada pengecam peringkat atas dalam skop blok di mana pembolehubah tempatan dengan nama yang sama wujud. Menurut spesifikasi Go untuk Pengisytiharan dan Skop, pengecam yang diisytiharkan secara tempatan diutamakan dalam skopnya.
Untuk mengakses kedua-dua pembolehubah peringkat atas dan pembolehubah setempat, anda boleh menggunakan nama yang berbeza atau gunakan salah satu daripada penyelesaian berikut:
cname := name name := "Jobs" fmt.Println(name) fmt.Println(cname)
Kaedah ini menyimpan nilai pemalar atau pembolehubah peringkat atas sebelum mencipta pembolehubah setempat .
func getName() string { return name } name := "Jobs" fmt.Println(name) fmt.Println(getName())
Pendekatan ini menyediakan cara alternatif untuk mengakses pembolehubah peringkat atas dengan mentakrifkan fungsi yang mengembalikan nilainya.
Kedua-dua kaedah mengembalikan output yang sama:
Jobs Yosua
Ini menunjukkan bahawa anda boleh mengakses pembolehubah peringkat atas semasa masih menggunakan pembolehubah tempatan dengan nama yang sama dengan menggunakan salah satu penyelesaian ini. Walau bagaimanapun, adalah penting untuk diingat bahawa pembolehubah tempatan diutamakan berbanding pengecam peringkat atas dalam skopnya.
Atas ialah kandungan terperinci Bagaimana untuk Mengakses Pemalar atau Pembolehubah Tahap Pakej Apabila Pembolehubah Setempat dengan Nama Yang Sama Wujud dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!