Rumah > Artikel > pembangunan bahagian belakang > Bolehkah Struktur Terbenam Digantikan untuk Pewarisan Kaedah dalam Go?
Struktur Terbenam dan Pewarisan Kaedah
Adakah terdapat alternatif kepada struct terbenam untuk kaedah pewarisan?
Ya, ada cara alternatif untuk mewarisi kaedah jenis tanpa menggunakan struct terbenam. Walau bagaimanapun, ia memerlukan pemahaman yang lebih mendalam tentang sistem jenis Go.
Struktur Terbenam
Dalam Go, membenamkan struct membolehkan anda mengakses medan dan kaedah struct terbenam seolah-olah ia adalah sebahagian daripada struct yang mengandungi. Ini ialah ciri berkuasa yang boleh digunakan untuk mencipta warisan antara jenis.
Gotcha
Apabila anda membenamkan struct, set kaedah bagi struct terbenam bukan secara automatik dinaikkan pangkat kepada struct yang mengandungi. Untuk mempromosikan kaedah, struct terbenam mestilah tanpa nama.
Promosi Kaedah
Promosi kaedah ialah ciri bahasa yang membenarkan kaedah daripada struct terbenam tanpa nama diakses seolah-olah mereka adalah kaedah struct yang mengandungi. Ini dicapai dengan mengikuti peraturan ini:
Contoh
Pertimbangkan kod berikut:
<code class="go">type Props map[string]interface{} func (p Props) GetString(key string) string { return p[key].(string) } type Node struct { Props } func main() { node := Node{"test": "foo"} fmt.Println(node.GetString("test")) // Output: foo }</code>
Dalam ini contoh, struct Nod membenamkan struct tanpa nama jenis Props. Ini membolehkan kaedah GetString daripada Props dinaikkan pangkat kepada Node.
Pendekatan Alternatif
Pendekatan alternatif tanpa pembenaman ialah menggunakan penerima penuding. Dengan menghantar penuding kepada fungsi penerima, anda boleh mengakses medan dan kaedah struct asas tanpa perlu membenamkannya.
Contoh
Berikut ialah pelaksanaan alternatif menggunakan penerima penunjuk:
<code class="go">type Props map[string]interface{} func (p *Props) GetString(key string) string { return p[key].(string) } type Node struct { Props } func main() { node := &Node{Props{"test": "foo"}} fmt.Println(node.GetString("test")) // Output: foo }</code>
Dalam contoh ini, kami menggunakan penerima penunjuk untuk kaedah GetString. Ini membolehkan kami mengakses medan dan kaedah struct Props yang mendasari tanpa perlu membenamkannya.
Kesimpulan
Walaupun struct terbenam ialah alat yang berkuasa untuk pewarisan, mereka bukan selalu pilihan terbaik. Dalam kes di mana promosi kaedah tidak diingini atau perlu, menggunakan penerima penunjuk boleh memberikan alternatif yang lebih fleksibel dan berprestasi.
Atas ialah kandungan terperinci Bolehkah Struktur Terbenam Digantikan untuk Pewarisan Kaedah dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!