Rumah >pembangunan bahagian belakang >Golang >Adakah terdapat rujukan lewat dalam bahasa go?
Tidak. Go tidak mempunyai pembolehubah rujukan, jadi tiada rujukan lulus semasa memanggil fungsi dalam bahasa Go. Setiap pembolehubah yang ditakrifkan dalam program Go menduduki lokasi memori yang unik Tidak mungkin untuk mencipta dua pembolehubah yang berkongsi lokasi memori yang sama adalah mungkin untuk mencipta dua pembolehubah yang menghala ke lokasi memori yang sama, tetapi ini tidak sama dengan dua pembolehubah berkongsi memori yang sama Lokasinya berbeza.
Persekitaran pengendalian tutorial ini: sistem Windows 7, GO versi 1.18, komputer Dell G3.
Adalah jelas bahawa Go tidak mempunyai pembolehubah rujukan, jadi tiada laluan rujukan semasa memanggil fungsi dalam bahasa Go.
Dalam sesetengah bahasa pembangunan (seperti C++), alias boleh diisytiharkan untuk pembolehubah sedia ada Alias ini dipanggil pembolehubah rujukan.
#include <stdio.h> int main() { int a = 10; int &b = a; int &c = b; printf("%p %p %p\n", &a, &b, &c); // 0x7ffe114f0b14 0x7ffe114f0b14 0x7ffe114f0b14 return 0; }
Anda boleh melihat bahawa a, b dan c semua menunjuk ke lokasi memori yang sama. Menulis kepada a mempengaruhi b dan c. Ini berguna apabila anda ingin mengisytiharkan pembolehubah rujukan dalam skop yang berbeza - iaitu apabila fungsi dipanggil.
Tidak seperti C++, setiap pembolehubah yang ditakrifkan dalam program Go menduduki lokasi memori yang unik.
package main import "fmt" func main() { var a, b, c int fmt.Println(&a, &b, &c) // 0x1040a124 0x1040a128 0x1040a12c }
Tidak mungkin untuk mencipta dua pembolehubah yang berkongsi lokasi memori yang sama. Adalah mungkin untuk mencipta dua pembolehubah yang menghala ke lokasi memori yang sama, tetapi ini tidak sama dengan dua pembolehubah yang berkongsi lokasi memori yang sama.
package main import "fmt" func main() { var a int var b, c = &a, &a fmt.Println(b, c) // 0x1040a124 0x1040a124 fmt.Println(&b, &c) // 0x1040c108 0x1040c110 }
Dalam kod di atas, b dan c kedua-duanya mempunyai nilai yang sama - iaitu alamat pembolehubah a, tetapi a dan c disimpan di lokasi yang berbeza dalam ingatan. Menukar kandungan b tidak akan menjejaskan c.
Salah! peta dan saluran bukan rujukan Jika ada, kod berikut akan menghasilkan palsu.
package main import "fmt" func fn(m map[int]int) { m = make(map[int]int) } func main() { var m map[int]int fn(m) fmt.Println(m == nil) }
Jika peta m ialah pembolehubah rujukan gaya C++, m yang diisytiharkan dalam main() dan m yang diisytiharkan dalam fn() akan berkongsi ruang memori yang sama. Walau bagaimanapun, kerana memberikan nilai kepada m dalam fn() tidak menjejaskan m dalam main(), kita dapat melihat bahawa peta bukan pembolehubah rujukan.
Go tidak melepasi rujukan kerana Go tidak mempunyai pembolehubah rujukan.
[Cadangan berkaitan: Pergi tutorial video, Pengajaran pengaturcaraan]
Atas ialah kandungan terperinci Adakah terdapat rujukan lewat dalam bahasa go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!