Rumah >pembangunan bahagian belakang >Golang >Adakah Operator Dereference Go Mencipta Salinan atau Rujukan kepada Struktur Asal?

Adakah Operator Dereference Go Mencipta Salinan atau Rujukan kepada Struktur Asal?

Barbara Streisand
Barbara Streisandasal
2024-11-28 12:29:10230semak imbas

Does Go's Dereference Operator Create a Copy or a Reference to the Original Struct?

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!

Kenyataan:
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