Rumah > pembangunan bahagian belakang > Golang > Mengapa Penetap Go Struct Memerlukan Penunjuk untuk Mengubah Suai Struktur Asal?

Mengapa Penetap Go Struct Memerlukan Penunjuk untuk Mengubah Suai Struktur Asal?

Patricia Arquette
Lepaskan: 2024-12-16 04:22:12
asal
393 orang telah melayarinya

Why Do Go Struct Setters Need Pointers to Modify the Original Struct?

Menggunakan Penetap Struktur: Memahami Kepentingan Penunjuk

Apabila bekerja dengan struct dalam Go, penggunaan penetap boleh mengubah suai sifat struct. Walau bagaimanapun, mungkin terdapat keadaan di mana pengubahsuaian yang diingini tidak ditunjukkan seperti yang diharapkan. Ini disebabkan oleh cara struct dihantar ke dalam fungsi.

Dalam kod contoh yang disediakan:

type T struct { Val string }

func (t T) SetVal(s string) {
    t.Val = s
}

func (t *T) SetVal2(s string) {
    (*t).Val = s
}
Salin selepas log masuk

Fungsi SetVal yang disediakan tidak mengubah suai struct asal seperti yang dijangkakan kerana salinan struct diluluskan sebagai nilai ke dalam fungsi. Pengubahsuaian yang dibuat pada salinan ini tidak menjejaskan struct asal.

Sebagai alternatif, fungsi SetVal2 menjangkakan penunjuk kepada struct, membenarkan ia mengubah suai struct asal. Ini kerana Go menghantar penunjuk kepada struct mengikut nilai, bermakna fungsi menerima rujukan kepada lokasi memori yang sama seperti struct asal.

Untuk menunjukkan tingkah laku ini, pertimbangkan kod berikut:

v := T{"abc"}
fmt.Println(v)        // {abc}
v.SetVal("pdq")
fmt.Println(v)        // {abc}
v.SetVal2("xyz")
fmt.Println(v)        // {xyz}
Salin selepas log masuk

Dalam contoh ini, struct v asal tidak diubah suai oleh SetVal, tetapi ia diubah suai oleh SetVal2. Ini terbukti dengan perbezaan dalam output.

Pengambilan utama ialah dalam Go, apabila menggunakan setter untuk struct, adalah penting untuk memahami perbezaan antara lulus dengan nilai dan lulus melalui penunjuk. Menggunakan penunjuk membenarkan fungsi mengubah suai struct asal, sambil menghantar nilai menghasilkan salinan struct dalam fungsi.

Atas ialah kandungan terperinci Mengapa Penetap Go Struct Memerlukan Penunjuk untuk Mengubah Suai Struktur Asal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan