Rumah >pembangunan bahagian belakang >Golang >Mengapa Saya Tidak Boleh Mendapatkan Alamat String Literal dalam Go?
Mengatasi Huruf Rentetan dalam Go
Dalam aplikasi yang melibatkan pemindahan rujukan yang kerap kepada rentetan statik, kebimbangan peruntukan memori timbul. Artikel ini membincangkan sebab di sebalik ketidakupayaan untuk mendapatkan alamat tersurat rentetan dan meneroka penyelesaian yang berpotensi.
Mengapa Pengambilan Alamat Gagal
Mengambil semula alamat tersurat rentetan ialah tidak boleh dilaksanakan dalam Go kerana semantik yang tidak jelas. Bahasa ini membezakan antara mengambil alamat nilai pemalar itu sendiri, yang boleh mengubah nilai dan berpotensi membawa kepada ralat masa jalan, dan memperuntukkan objek baharu, menyalin pemalar dan memperoleh alamat versi baharu ini.
Tidak seperti literal dalam test1(), test2() menunjukkan pendekatan yang sah. Dengan menggunakan pembolehubah sedia ada dengan semantik yang ditakrifkan secara 明確, Go mengelakkan kekaburan yang dikaitkan dengan literal. Walau bagaimanapun, pendekatan ini tidak akan digunakan untuk pemalar, seterusnya menekankan larangan terhadap pengambilan alamat literal.
Penyelesaian Optimum: test2()
Penyelesaian yang disyorkan adalah untuk menggunakan pendekatan test2(). Walaupun ia mungkin memerlukan kod yang lebih bertele-tele, ia sejajar dengan peraturan Go yang jelas dan padat mengenai pengambilan alamat. Dengan mencipta pembolehubah khusus dan mengambil alamat pembolehubah ini, keperluan untuk pengalamatan literal dielakkan.
Pengecualian: Literal Komposit
Pengecualian kepada peraturan am wujud dalam kes literal komposit, yang membolehkan penciptaan dan menangani struktur tanpa nama. Pengecualian ini, yang digariskan dalam spesifikasi bahasa, membenarkan kod seperti:
func f() interface{} { return &struct { A int B int }{1, 2} }
Walaupun pengecualian ini menyediakan cara alternatif untuk mendapatkan semula alamat, kejelasan dan kesederhanaan penyelesaian test2() kekal sebagai pendekatan pilihan untuk kebanyakan senario.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Mendapatkan Alamat String Literal dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!