Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah saya boleh melaksanakan kaedah antara muka untuk jenis yang berbeza di Golang?
Melaksanakan Kaedah Antara Muka dalam Jenis Tidak Serupa Menggunakan Antara Muka Golang
Dalam Go, selalunya diingini untuk mempunyai jenis struktur data yang berbeza melaksanakan antara muka yang sama untuk menyediakan satu set tingkah laku yang sama. Sebagai contoh, pertimbangkan dua struct:
type First struct { str string } type Second struct { str string }
Kami ingin kedua-dua struct melaksanakan antara muka A:
type A interface { PrintStr() // Print First.str or Second.str }
Walau bagaimanapun, melaksanakan PrintStr() untuk setiap struct secara berasingan nampaknya berlebihan:
func (f First) PrintStr() { fmt.Print(f.str) } func (s Second) PrintStr() { fmt.Print(s.str) }
Adalah ideal untuk mempunyai satu pelaksanaan untuk semua struct yang melaksanakan A. Percubaan untuk melakukan ini langsung tidak berfungsi:
func (a A) PrintStr() { fmt.Print(a.str) }
Sebabnya ialah a tidak mempunyai medan str. Sebaliknya, penyelesaian yang lebih elegan melibatkan mencipta jenis asas dan membenamkannya ke dalam dua struct kami:
type WithString struct { str string } type First struct { WithString } type Second struct { WithString } type A interface { PrintStr() // Print First.str or Second.str } func (w WithString) PrintStr() { fmt.Print(w.str) }
Di sini, WithString berfungsi sebagai jenis asas, dan Pertama dan Kedua membenamkannya. Ini memberikan kita pelaksanaan terpusat untuk PrintStr().
Contoh penggunaan:
a := First{ WithString: WithString{ str: "foo", }, }
Perhatikan bahawa kita boleh mencipta tika First dengan membenamkan tika WithString. Teknik ini membolehkan kami mencapai matlamat kami untuk mempunyai satu pelaksanaan untuk berbilang jenis berbeza yang melaksanakan antara muka yang sama.
Atas ialah kandungan terperinci Bagaimanakah saya boleh melaksanakan kaedah antara muka untuk jenis yang berbeza di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!