Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah Antara Muka dalam Go Boleh Digunakan untuk Melaksanakan Kaedah bagi Pelbagai Jenis Tanpa Penduaan Kod?
Melaksanakan Kaedah untuk Pelbagai Jenis Menggunakan Antara Muka dalam Go
Dalam Go, antara muka menyediakan mekanisme untuk menentukan set kaedah yang pelbagai jenis boleh melaksanakan. Ini membenarkan tingkah laku polimorfik, di mana jenis yang berbeza boleh berkongsi set operasi biasa.
Pernyataan Masalah
Andaikan kita mempunyai dua struct, Pertama dan Kedua, yang kita mahu untuk melaksanakan antara muka, A, yang mentakrifkan kaedah yang dipanggil PrintStr(). Setiap struct mempunyai medan rentetan bernama str. Walau bagaimanapun, jika kita melaksanakan kaedah PrintStr() secara berasingan untuk kedua-dua struct, ia menjadi berlebihan.
Cadangan Penyelesaian
Seseorang mungkin berpendapat adalah mungkin untuk mempunyai satu pelaksanaan PrintStr() untuk kedua-dua struct dengan mentakrifkannya pada antara muka A itu sendiri. Walau bagaimanapun, pendekatan ini tidak berfungsi kerana antara muka tidak membawa sebarang data.
Membenamkan dan Melaksanakan
Daripada pelaksanaan tunggal pada antara muka, kami boleh mencipta jenis asas, WithString, dan benamkannya ke dalam Pertama dan Kedua. Jenis WithString akan mempunyai medan str dan melaksanakan kaedah PrintStr(). Dengan membenamkan WithString, First dan Second secara tidak langsung memperoleh medan str dan pelaksanaan PrintStr(). Ini membolehkan mereka melaksanakan antara muka A dengan penduaan minimum.
Kod Contoh
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) }
Penggunaan
a := First{ WithString: WithString{ str: "foo", }, }
Pendekatan ini membolehkan kami melaksanakan kaedah biasa untuk jenis yang berbeza sambil mengelakkan pertindihan kod.
Atas ialah kandungan terperinci Bagaimanakah Antara Muka dalam Go Boleh Digunakan untuk Melaksanakan Kaedah bagi Pelbagai Jenis Tanpa Penduaan Kod?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!