Mengatasi Lebihan dalam Melaksanakan Kaedah untuk Pelbagai Jenis dengan Antara Muka Go
Dalam Go, antara muka menyediakan cara untuk menentukan tandatangan kaedah biasa yang boleh dilaksanakan oleh pelbagai jenis. Walaupun ini membenarkan polimorfisme dan penggunaan semula kod, ia boleh membawa kepada pelaksanaan berlebihan apabila berbilang jenis melaksanakan antara muka yang sama.
Pertimbangkan senario berikut: kami mempunyai dua struktur, Pertama dan Kedua, yang kedua-duanya perlu melaksanakan antara muka A dengan kaedah PrintStr(). Melaksanakan kaedah dalam setiap struct secara individu akan menjadi berlebihan.
type First struct { str string } type Second struct { str string } type A interface { PrintStr() } func (f First) PrintStr() { fmt.Print(f.str) } func (s Second) PrintStr() { fmt.Print(s.str) }
Mengatasi Lebihan
Daripada menduplikasi pelaksanaan, kita boleh mencipta jenis asas yang merangkumi perkara biasa kefungsian. Jenis asas ini kemudiannya boleh dibenamkan ke dalam Pertama dan Kedua, membolehkan mereka menggunakan semula pelaksanaan tunggal.
type WithString struct { str string } type First struct { WithString } type Second struct { WithString } type A interface { PrintStr() } func (w WithString) PrintStr() { fmt.Print(w.str) }
Pendekatan ini menghapuskan lebihan dan mengekalkan keselamatan jenis. Jenis asas WithString bertindak sebagai cara mudah untuk mengumpulkan kefungsian biasa, yang boleh digunakan semula oleh berbilang jenis.
Penggunaan
Untuk menggunakan kaedah PrintStr(), kami hanya buat contoh Pertama atau Kedua dan benamkan jenis WithString.
a := First{ WithString: WithString{ str: "foo", }, }
Kesimpulan
Dengan menggunakan jenis asas dan pembenaman, kami boleh menyelaraskan pelaksanaan kaedah untuk jenis yang berbeza yang melaksanakan antara muka yang sama. Pendekatan ini menggalakkan penggunaan semula kod, mengurangkan lebihan dan memastikan keselamatan jenis.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengelakkan Pelaksanaan Kaedah Berlebihan Apabila Menggunakan Antara Muka Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!