Go 1.7 memperkenalkan fungsi runtime.KeepAlive, digunakan untuk menghalang pemuktamadkan pembolehubah pramatang. Walau bagaimanapun, ia menimbulkan persoalan tentang apabila pembolehubah menjadi tidak dapat dicapai.
Dalam Go, pembolehubah tidak boleh dicapai apabila masa jalan menentukan bahawa kod tidak boleh mengaksesnya semula. Ini boleh berlaku apabila:
Contoh yang disediakan dalam nota keluaran Go menyerlahkan penggunaan runtime.KeepAlive dengan syscall.Read. Apabila fail dibuka menggunakan syscall.Open, deskriptor fail dikembalikan dan dibungkus dalam struct (Fail). Pengakhir dilampirkan pada struct ini untuk menutup deskriptor fail.
Walau bagaimanapun, jika deskriptor fail hanya digunakan dalam syscall.Baca panggilan, ia mungkin tidak dapat dihubungi sebelum syscall.Baca selesai. Ini kerana deskriptor fail dihantar sebagai hujah kepada syscall.Read, dan masa jalan Go dibenarkan untuk menandakan pembolehubah tidak dapat dicapai semasa pelaksanaan syscall.Read.
Untuk mengelakkan ini, runtime.KeepAlive dipanggil selepas syscall.Baca. Ini memastikan bahawa masa jalan tidak boleh menandakan pemboleh ubah tidak boleh dicapai sebelum syscall.Baca kembali, menghalang pemuktamadan pramatang bagi deskriptor fail.
masa jalan.KeepAlive sendiri melakukannya tidak melakukan sesuatu yang ajaib. Pelaksanaannya hanya berfungsi KeepAlive(antara muka{}) {}. Walau bagaimanapun, ia menyediakan cara yang jelas untuk mendokumenkan hasrat mengekalkan pembolehubah hidup dan menghalang pengoptimuman berpotensi yang secara tidak sengaja boleh menandakan pembolehubah itu tidak dapat dicapai.
Atas ialah kandungan terperinci Bilakah Pembolehubah Menjadi Tidak Dapat Dicapai dalam Go, dan Bagaimanakah `runtime.KeepAlive` Membantu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!