Rumah >pembangunan bahagian belakang >Golang >Adakah Operator Dereference Go Mencipta Salinan atau Rujukan kepada Struktur Asal?
Go Dereferencing: Salin atau Tidak, Itulah Soalannya
Apabila mengakses struct Go menggunakan operator penyahrujukan (*), pengguna boleh tertanya-tanya jika hasilnya adalah salinan baru struct atau rujukan kepada yang asal objek.
Memahami Tingkah Laku
Dalam coretan kod yang disediakan:
type me struct { color string total int } func study() *me { p := me{} return &p } obj := *study()
study() mengembalikan penunjuk kepada struct me. Menyahrujuknya dalam obj mencipta salinan struct. Ini jelas daripada alamat memori &p.color dan &obj.color, yang berbeza.
Seseorang mungkin menjangkakan struct obj yang dinyahrujuk mempunyai alamat memori yang sama seperti struct asal, tetapi itu tidak berlaku dalam contoh ini. Tingkah laku ini boleh dikaitkan dengan penyerahan pembolehubah automatik Go pada akhir skopnya.
Apabila Ia Sebenarnya Rujukan
Untuk mencapai tingkah laku rujukan, seseorang boleh menetapkan penunjuk terus ke struct menggunakan:
obj := study()
Dalam kes ini, obj akan menjadi penunjuk kepada yang asal me struct, dan perubahan kepada sama ada p atau obj akan menjejaskan struct asas yang sama.
Kesimpulan
Apabila membatalkan rujukan struct dalam Go, adalah penting untuk memahami bahawa hasilnya ialah salinan struct asal melainkan penunjuk kepada struct diberikan secara eksplisit. Tingkah laku ini memastikan bahawa perubahan yang dibuat pada struct yang dinyahrujuk tidak menjejaskan struktur asal, mengekalkan enkapsulasi dan kebebasan berubah.
Atas ialah kandungan terperinci Adakah Operator Dereference Go Mencipta Salinan atau Rujukan kepada Struktur Asal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!