Rumah > pembangunan bahagian belakang > Golang > Benamkan Struct atau Penunjuk kepada Struct dalam Go: Bilakah Anda Harus Memilih Apa?

Benamkan Struct atau Penunjuk kepada Struct dalam Go: Bilakah Anda Harus Memilih Apa?

Patricia Arquette
Lepaskan: 2024-10-30 06:06:03
asal
506 orang telah melayarinya

 Embed a Struct or a Pointer to a Struct in Go: When Should You Choose What?

Membenamkan Struct vs Penunjuk ke Struct dalam Struct Digunakan sebagai Penunjuk

Dalam Go, selalunya perlu merujuk struct sebagai penunjuk, terutamanya apabila bekerja dengan berorientasikan objek corak. Walau bagaimanapun, apabila membenamkan struct dalam struct lain yang digunakan sebagai penunjuk, terdapat pilihan yang perlu dibuat: benamkan struct itu sendiri atau penunjuk kepadanya. Keputusan ini mempunyai implikasi halus yang boleh menjejaskan tingkah laku kod.

Membenamkan Struktur

Pertimbangkan kod berikut:

<code class="go">type B struct {
    X int
}

type A struct {
    B
}</code>
Salin selepas log masuk

Di sini, struct B dibenamkan terus dalam A struct. Nilai sifar A termasuk objek terbenam jenis B, yang juga mempunyai nilai sifarnya. Akibatnya, kami boleh memanggil kaedah Cetak objek B terbenam dengan selamat:

<code class="go">var a A
a.Print() // prints 0</code>
Salin selepas log masuk

Membenamkan Penunjuk pada Struktur

Sebaliknya, pertimbangkan kod berikut:

<code class="go">type B struct {
    X int
}

type A struct {
    *B
}</code>
Salin selepas log masuk

Di sini, struct B dibenamkan sebagai penunjuk dalam struct A. Nilai sifar A mempunyai nilai penunjuk sifar untuk *B tertanam. Percubaan untuk memanggil kaedah Cetak pada objek *B terbenam akan mengakibatkan panik:

<code class="go">var a A
a.Print() // panics</code>
Salin selepas log masuk

Menyalin Perbezaan

Apabila mencipta objek baharu jenis ini, tingkah laku berbeza:

  • Untuk objek A, salinan objek B terbenam dibuat, bermakna sebarang pengubahsuaian yang dibuat pada medan terbenam tidak akan menjejaskan objek asal.
  • Untuk objek A dengan penunjuk terbenam, salinan daripada *B penuding dicipta, bermakna sebarang pengubahsuaian yang dibuat pada objek B yang mendasari akan menjejaskan kedua-dua objek asal dan mana-mana salinan yang berkongsi penunjuk yang sama.

Kesimpulan

Pilihan antara membenamkan struct secara langsung atau menggunakan penunjuk bergantung pada kes penggunaan yang dimaksudkan. Membenamkan struct memberikan kemudahan untuk mengakses medan terbenam secara langsung, manakala membenamkan penuding membenarkan pengubahsuaian pada struct terbenam untuk mempengaruhi berbilang salinan. Memahami implikasi ini memastikan penggunaan yang betul dan mengelakkan kemungkinan perangkap dalam kod anda.

Atas ialah kandungan terperinci Benamkan Struct atau Penunjuk kepada Struct dalam Go: Bilakah Anda Harus Memilih Apa?. 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