Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Penetap Struktur Go Mengendalikan Nilai Laluan berbanding Rujukan Laluan?

Bagaimanakah Penetap Struktur Go Mengendalikan Nilai Laluan berbanding Rujukan Laluan?

Barbara Streisand
Lepaskan: 2024-12-14 14:29:15
asal
491 orang telah melayarinya

How Do Go's Struct Setters Handle Pass-by-Value vs. Pass-by-Reference?

Memahami Penetap Struktur dalam Go

Dalam Go, struct boleh dihantar ke fungsi melalui rujukan atau nilai. Apabila diluluskan dengan rujukan, fungsi boleh mengubah suai struct asal. Walau bagaimanapun, menghantar struct mengikut nilai membawa kepada penciptaan salinan baharu struct dalam fungsi dan sebarang pengubahsuaian yang dibuat pada salinan ini tidak akan mengubah struct asal.

Dalam contoh kod yang disediakan:

type T struct { Val string }
Salin selepas log masuk

Struktur T mengandungi medan rentetan tunggal bernama Val.

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

Kaedah SetVal menerima struct mengikut nilai dan cuba mengubah suai medan Valnya. Walau bagaimanapun, ini tidak berfungsi seperti yang dijangkakan kerana fungsi ini beroperasi pada salinan struct.

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

Kaedah SetVal2, sebaliknya, menerima penunjuk kepada struct dan oleh itu boleh mengubah suai asal struct. Ini kerana Go secara dinamik menaip-semak penunjuk, membenarkan fungsi mengakses struct asas dan mengubah suai medannya secara langsung.

Ringkasnya, adalah penting untuk memahami bahawa struct yang diluluskan oleh nilai mencipta salinan baharu, menghalang sebarang pengubahsuaian yang dibuat dalam fungsi daripada menjejaskan struktur asal. Untuk mengubah suai struktur asal dari dalam fungsi, ia mesti diluluskan melalui rujukan, menggunakan penunjuk.

Atas ialah kandungan terperinci Bagaimanakah Penetap Struktur Go Mengendalikan Nilai Laluan berbanding Rujukan Laluan?. 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