Penunjuk dalam Go berbeza daripada penunjuk dalam bahasa lain disebabkan oleh: keselamatan jenis, penyahrujukan eksplisit, larangan aritmetik penunjuk dan semantik nilai, yang berbeza daripada semantik rujukan, di mana penunjuk mengandungi rujukan kepada nilai dan bukannya nilai diri mereka sendiri.
Dalam banyak bahasa pengaturcaraan, penunjuk ialah pembolehubah yang digunakan untuk merujuk lokasi tertentu dalam ingatan. Penunjuk dalam bahasa Go mempunyai perbezaan utama berikut daripada penunjuk dalam bahasa lain:
Keselamatan taip
Penunjuk dalam bahasa Go adalah selamat jenis. Ini bermakna bahawa penunjuk hanya boleh menunjuk kepada jenis yang dimaksudkan. Sebagai contoh, kod berikut akan disusun dengan ralat:
var i int var p *string = &i // 编译时错误:无法将 int* 分配给 *string
Penyahrujukan eksplisit
Penunjuk mesti dinyahrujuk secara eksplisit dalam bahasa Go. Ini boleh dicapai melalui pengendali *
. Contohnya, kod berikut mencetak nilai int yang dirujuk oleh penuding:
package main import "fmt" func main() { i := 10 p := &i fmt.Println(*p) // 输出:10 }
Aritmetik penunjuk
Aritmetik penunjuk tidak dibenarkan dalam bahasa Go. Ini bermakna anda tidak boleh menggunakan operator ++ atau -- untuk menambah atau mengurangkan nilai penunjuk.
Semantik nilai
Penunjuk bahasa Go mempunyai semantik nilai. Ini bermakna pembolehubah penunjuk itu sendiri menyimpan nilai penunjuk, bukan nilai yang ditunjuk. Ini berbeza daripada semantik rujukan dalam bahasa lain, di mana pembolehubah penunjuk menyimpan rujukan kepada nilai.
Contoh
Untuk menggambarkan lagi perbezaan ini, berikut ialah contoh melaksanakan fungsi yang sama menggunakan C dan Go:
C
int main() { int i = 10; int *p = &i; printf("%d\n", i); // 输出:10 printf("%d\n", *p); // 输出:10 *p = 20; // 修改指针引用的值 printf("%d\n", i); // 输出:20 }
Go
kod ini ditunjukkan rujukan Semantik, di mana penunjuk p secara langsung mengubah suai nilai i. Kod Go mempamerkan nilai semantik, di mana penunjuk p ialah nilai bebas dan pengubahsuaiannya tidak menjejaskan nilai i.Atas ialah kandungan terperinci Perbezaan antara penunjuk dalam bahasa berbeza dan penunjuk bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!