Bila hendak menggunakan Rujukan Penunjuk lwn Nilai untuk Medan Terbenam dalam Go?

DDD
Lepaskan: 2024-10-30 23:47:29
asal
716 orang telah melayarinya

When to Use a Pointer vs. Value Reference for Embedded Fields in Go?

Pembenaman: Bila Perlu Menggunakan Penunjuk vs. Rujukan Nilai

Apabila menggabungkan satu struktur dalam yang lain di Golang, pilihan timbul antara menggunakan penunjuk atau rujukan nilai. Pertimbangkan coretan kod berikut:

<code class="go">type Job struct {
    Command string
    *log.Logger
}</code>
Salin selepas log masuk

Dalam contoh ini, kami telah membenamkan jenis *log.Logger, yang diwakili oleh penunjuk, dalam struktur Kerja. Sebagai alternatif, kami boleh menggunakan rujukan nilai seperti di bawah:

<code class="go">type Job struct {
    Command string
    log.Logger
}</code>
Salin selepas log masuk

Walaupun kedua-dua pendekatan mencapai pembenaman, implikasinya berbeza. Menurut spesifikasi Go, medan terbenam menyokong sama ada jenis itu sendiri atau penunjuk kepada jenis bukan antara muka. Yang penting, jenis yang dibenamkan tidak boleh menjadi jenis penuding.

Membenamkan penuding, yang dikenali sebagai "penunjuk tepi benam," menawarkan kelebihan khusus. Pertama, ia membenarkan memanfaatkan fungsi yang mengikut corak NewX, di mana struktur dimulakan dan dikembalikan melalui rujukan. Kedua, ia membolehkan penetapan dinamik kejadian berbeza kepada jenis terbenam pada masa jalan.

Sebagai contoh, pertimbangkan kod berikut:

<code class="go">type Bitmap struct{
    data [4][5]bool
}

type Renderer struct{
    *Bitmap //Embed by pointer
    on uint8
    off uint8
}</code>
Salin selepas log masuk

Dalam contoh ini, jenis Renderer membenamkan Peta Bit oleh rujukan. Ini membenarkan satu tika Bitmap berfungsi sebagai tika terbenam untuk beberapa tika Renderer, setiap satu dengan set aksaranya yang unik. Output kod ini menunjukkan cara berbilang pemapar boleh beroperasi pada struktur data asas yang sama.

OXXO
OXOO
OXOO
OXOO
.@@.
.@..
.@..
.@..
Salin selepas log masuk

Sebaliknya, membenamkan rujukan nilai tidak memberikan kelebihan ini. Walau bagaimanapun, ia tidak memerlukan instantiasi jenis terbenam untuk mengakses kaedahnya. Akhirnya, keputusan antara menggunakan penunjuk atau rujukan nilai bergantung pada keperluan khusus aplikasi dan gelagat yang diingini untuk medan terbenam.

Atas ialah kandungan terperinci Bila hendak menggunakan Rujukan Penunjuk lwn Nilai untuk Medan Terbenam dalam Go?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!