Melaksanakan Berbilang Antara Muka dengan Tanda Tangan Kaedah Yang Sama
Dalam Go, antara muka menawarkan keselamatan jenis dan menyokong pelbagai warisan. Walau bagaimanapun, apabila dua antara muka yang ditakrifkan dalam pakej berbeza berkongsi tandatangan kaedah yang sama, melaksanakan kedua-duanya dengan satu pelaksanaan boleh membawa kepada ketidakkonsistenan.
Untuk menangani perkara ini, bahasa pengaturcaraan Go menguatkuasakan ketekalan dalam jenis kaedah apabila melaksanakan antara muka. Ini memastikan kejelasan dan mengurangkan kemungkinan kekeliruan.
Dalam senario yang disediakan, anda ingin melaksanakan kedua-dua antara muka, A.Doer dan B.Doer, menggunakan kaedah C.Do yang sama. Walaupun C.Do memenuhi keperluan A.Doer, ia mungkin tidak mematuhi logik yang diharapkan oleh B.Doer.
Satu penyelesaian ialah menggunakan penegasan jenis. Dengan menyemak sama ada objek memenuhi kedua-dua A.Doer dan B.Doer, anda boleh menentukan pelaksanaan yang hendak digunakan.
<code class="go">if _, ok := obj.(A.Doer); ok { // Use A.Doer implementation } if _, ok := obj.(B.Doer); ok { // Use B.Doer implementation }</code>
Namun, jika logik untuk A.Do dan B.Do berbeza dengan ketara, lebih pendekatan yang mantap ialah mencipta pembungkus berasingan untuk objek.
Buat dua jenis baharu, DoerA dan DoerB, setiap satu mengandungi objek C dan melaksanakan sama ada A.Doer atau B.Doer masing-masing. Dengan menghantar pembungkus yang sesuai kepada fungsi yang sepadan, anda boleh memastikan bahawa logik yang dijangkakan dilaksanakan.
<code class="go">type DoerA struct { C C } // Implement A.Do() using C.Do() func (d DoerA) Do() string { return "C now implements A as per its logic" } type DoerB struct { C C } // Implement B.Do() using C.Do() func (d DoerB) Do() string { return "C now implements B as per its logic" } func main() { c := C(0) dA := DoerA{C: c} dB := DoerB{C: c} A.FuncA(dA) B.FuncB(dB) }</code>
Dengan menggunakan pembungkus yang berasingan, anda boleh menguatkuasakan pelaksanaan yang betul untuk setiap kaedah antara muka sambil masih menggunakan asas C objek.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Berbilang Antara Muka dengan Tanda Tangan Kaedah Yang Sama dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!