Dalam Go, penunjuk ialah pembolehubah yang menyimpan alamat pembolehubah lain. Ia membenarkan anda mengakses nilai pembolehubah yang dirujuk secara tidak langsung dengan menyahrujuknya menggunakan operator *.
Walau bagaimanapun, apabila menggunakan penunjuk, anda mungkin menghadapi masalah jika anda cuba menyahrujuk penuding sifar. Ini kerana penunjuk sifar tidak ditetapkan untuk menunjuk ke mana-mana lokasi memori yang sah.
Pertimbangkan kod berikut:
package main import ( "fmt" "reflect" ) func main() { var guess *int fmt.Println(reflect.TypeOf(guess)) *guess = 12345 fmt.Println(guess) }
Kod ini cuba menetapkan nilai *penunjuk teka ke 12345. Walau bagaimanapun, ini akan mengakibatkan panik masa jalan kerana alamat memori yang tidak sah atau penyahrujukan sifar.
The sebab ralat ini ialah penunjuk tekaan adalah sifar secara lalai. Apabila anda cuba menyahrujuk penuding sifar, atur cara akan ranap.
Untuk menyelesaikan isu ini, anda perlu menetapkan penuding ke lokasi memori yang sah dahulu. Anda boleh menggunakan fungsi new() terbina untuk mencipta pembolehubah int baharu dan menetapkan alamatnya kepada penunjuk tekaan:
var guess *int guess = new(int) *guess = 12345
Sekarang, penunjuk tekaan menghala ke pembolehubah int yang sah, dan anda boleh membatalkan rujukan dengan selamat ia untuk menetapkan atau mendapatkan nilainya.
Cara lain untuk menetapkan nilai pada penunjuk adalah dengan menggunakan operator & untuk mendapatkan alamat yang sedia ada pembolehubah:
value := 12345 guess := &value
Di sini, penunjuk tekaan kini menunjuk kepada pembolehubah nilai. Sebarang perubahan yang dibuat pada nilai yang ditunjuk melalui penunjuk tekaan juga akan mempengaruhi pembolehubah nilai asal.
Dengan memahami konsep penunjuk nil dan cara untuk menetapkannya ke lokasi memori yang sah, anda boleh menggunakan penunjuk dalam Go anda dengan berkesan. atur cara untuk mengakses dan memanipulasi data secara tidak langsung.
Atas ialah kandungan terperinci Bagaimana untuk Menetapkan Penunjuk Int dengan Selamat kepada Nilai Int dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!