Mengembalikan Penunjuk pada Tindanan dalam Go
Dalam C, mengembalikan penunjuk kepada pembolehubah yang dibuat tindanan daripada fungsi boleh membawa kepada masalah kerana memori mungkin dibuang selepas fungsi kembali, membatalkan penunjuk. Walau bagaimanapun, dalam Go, gelagatnya berbeza.
Dalam Go, penunjuk kepada pembolehubah yang dibuat tindanan boleh dikembalikan dengan selamat daripada fungsi, kerana pengkompil Go menggunakan analisis melarikan diri untuk menentukan sama ada nilai ditunjuk oleh pembolehubah boleh digunakan selepas fungsi kembali. Jika pengkompil tidak dapat membuktikan bahawa pembolehubah tidak dirujuk selepas fungsi kembali, ia akan secara automatik memperuntukkan pembolehubah pada timbunan sampah yang dikumpul untuk mengelakkan ralat penunjuk berjuntai.
Pengoptimuman ini boleh diperhatikan menggunakan -gcflags - m pilihan semasa penyusunan. Berikut ialah contoh:
package main import ( "fmt" ) func main() { fmt.Println(*(something())) } func something() *string { s := "a" return &s }
Menjalankan kod ini akan mencetak "a", menunjukkan bahawa adalah selamat untuk mengembalikan penuding kepada pembolehubah yang dibuat tindanan dalam Go.
Atas ialah kandungan terperinci Bolehkah Pergi dengan Selamat Mengembalikan Penunjuk kepada Pembolehubah Diperuntukkan Tindanan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!