Adakah terdapat rujukan lewat dalam bahasa go?

青灯夜游
Lepaskan: 2022-12-20 12:09:35
asal
5457 orang telah melayarinya

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.

Adakah terdapat rujukan lewat dalam bahasa go?

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.

Apakah pembolehubah rujukan?

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;
}
Salin selepas log masuk

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.

Bahasa Go tidak mempunyai pembolehubah rujukan

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
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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.

Peta dan Saluran ialah pembolehubah rujukan, bukan?

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)
}
Salin selepas log masuk

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.

Ringkasan

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan