Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengendalikan Tandatangan Kaedah Bercanggah dalam Pelbagai Antara Muka?
Cara Melaksanakan Berbilang Antara Muka dengan Tanda Tangan Kaedah Yang Sama dalam Pakej Berbeza
Andaikan anda perlu melaksanakan antara muka yang ditakrifkan dalam pakej berasingan dengan tandatangan kaedah yang bercanggah . Ini mungkin mencabar, tetapi Go menyediakan penyelesaian.
Mari kita pertimbangkan contoh:
Dalam pakej A:
package A type Doer interface { Do() string } func FuncA(doer A.Doer) { // Use doer.Do() here to implement functionality }
Dalam pakej B:
package B type Doer interface { Do() string } func FuncB(doer B.Doer) { // Use doer.Do() here to implement functionality }
Dalam pakej utama anda:
package main import ( "path/to/A" "path/to/B" ) type C int // C implements both A.Doer and B.Doer, but the implementation of Do() aligns with A. func (c C) Do() string { return "C implements both A and B" } func main() { c := C(0) A.FuncA(c) // Acceptable as C implements A.Doer B.FuncB(c) // Error, as the Do() implementation in C doesn't meet B.Doer requirements }
Penyelesaian:
Untuk menyelesaikan konflik ini, Go menawarkan pendekatan ringkas:
if _, ok := obj.(A.Doer); ok { }
Ini membolehkan anda mengesahkan sama ada objek (daripada jenis antara muka) mematuhi jenis antara muka lain (mis., A.Doer) pada masa jalan.
Walau bagaimanapun, OP menyerlahkan komplikasi selanjutnya: logik yang dilaksanakan untuk Do() dalam Pakej A dan Pakej B adalah berbeza. Untuk menangani perkara ini, buat pembalut di sekeliling objek anda:
Dengan melaksanakan pembalut yang berbeza, anda boleh mengawal kaedah yang hendak digunakan berdasarkan jenis antara muka yang dijangkakan (A.Doer atau B.Doer). Ini menghapuskan keperluan untuk satu kaedah Do() pada objek C asal, yang akan bergelut untuk melaksanakan kedua-dua logik.
Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Tandatangan Kaedah Bercanggah dalam Pelbagai Antara Muka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!