Rumah > pembangunan bahagian belakang > Golang > Mengapa Beberapa Penetap Go Struct Gagal Mengubah Suai Struct Asal?

Mengapa Beberapa Penetap Go Struct Gagal Mengubah Suai Struct Asal?

Susan Sarandon
Lepaskan: 2025-01-02 17:19:42
asal
525 orang telah melayarinya

Why Do Some Go Struct Setters Fail to Modify the Original Struct?

Memahami Gelagat Penetap untuk Struktur

Artikel ini menangani salah faham biasa yang dihadapi semasa menggunakan fungsi penetap untuk jenis struct dalam Go. Walaupun menggunakan fungsi penetap, nilai struct kekal tidak berubah, manakala fungsi penetap penunjuk berjaya mengubah suai struct.

Penetap Tanpa Penunjuk

Apabila struct diluluskan oleh nilai kepada fungsi, salinan struct dibuat dalam fungsi. Akibatnya, sebarang pengubahsuaian yang dibuat pada struct yang disalin dalam fungsi tidak ditunjukkan dalam struct asal di luar fungsi. Tingkah laku ini ditunjukkan dalam kod berikut:

type T struct { Val string }

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

Dalam contoh ini, fungsi SetVal ditakrifkan sebagai kaedah T tanpa penerima penunjuk. Apabila anda memanggil SetVal pada struct v, salinan v dicipta dalam fungsi dan sebarang perubahan yang dibuat pada salinan tidak menjejaskan struct asal v. Ini kerana menghantar nilai mengikut nilai mencipta objek baharu sepenuhnya.

Penetap Dengan Penunjuk

Sebaliknya, apabila struct diluluskan melalui rujukan menggunakan penerima penunjuk, fungsi menerima penunjuk kepada struct asal, membolehkan pengubahsuaian kepada struct sebenar di luar fungsi. Tingkah laku ini digambarkan dalam kod berikut:

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

Dalam contoh ini, SetVal2 ditakrifkan sebagai kaedah T dengan penerima penunjuk. Apabila anda memanggil SetVal2 pada penunjuk struct, fungsi menerima penunjuk kepada struct asal, dan sebarang perubahan yang dibuat pada struct dalam fungsi mempengaruhi struct asal di luar fungsi. Ini kerana menghantar penunjuk melalui rujukan berkongsi alamat objek yang sama.

Kesimpulan

Perbezaan antara menghantar struct dengan nilai dan menghantar penunjuk struct sebagai hujah adalah penting apabila memahami kelakuan fungsi setter untuk struct dalam Go. Dengan mengenali perbezaannya, anda boleh mengubah suai struct dengan berkesan melalui fungsi setter seperti yang dimaksudkan.

Atas ialah kandungan terperinci Mengapa Beberapa Penetap Go Struct Gagal Mengubah Suai Struct 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