Melaksanakan Antara Muka dengan Tanda Tangan Kaedah Yang Sama daripada Pakej Berasingan
Dalam Go, tidak mungkin untuk melaksanakan dua antara muka berbeza dengan tandatangan kaedah yang sama dalam pakej yang berbeza. Biasanya, setiap jenis antara muka menjangkakan pelaksanaan tertentu, memastikan keselamatan jenis.
Walau bagaimanapun, jika objek diperlukan untuk memenuhi berbilang antara muka dengan kaedah yang dinamakan secara identik, ia boleh menjadi mencabar untuk melaksanakan logik yang konsisten untuk semua antara muka.
Contoh Kes:
Pertimbangkan dua pakej A dan B yang mengandungi antara muka Doer dengan tandatangan kaedah yang sama:
package A type Doer interface { Do() string }
package B type Doer interface { Do() string }
Isu :
Dalam pakej utama, satu objek C direka bentuk untuk melaksanakan kedua-dua A.Doer dan B.Doer:
package main func (c C) Do() string { return "C now implements both A and B" }
Pelaksanaan ini, walau bagaimanapun, akan menyebabkan pepijat apabila memanggil B.FuncB(c) kerana kaedah Do yang dilaksanakan dalam C bertujuan hanya untuk A.Doer.
Penyelesaian:
Menggunakan ciri pembenaman Go, jenis pembungkus yang berasingan boleh dibuat:
Dengan menghantar jenis pembalut yang sesuai sebagai hujah kepada A.FuncA dan B.FuncB, logik yang dikehendaki untuk setiap antara muka boleh dikekalkan.
Nota Tambahan:
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Antara Muka dengan Tanda Tangan Kaedah Yang Sama daripada Pakej Berasingan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!