Melaksanakan Kaedah Antara Muka dengan Jenis Pulangan Antara Muka dalam Go
Dalam Go, seseorang mungkin menghadapi situasi di mana kaedah antara muka mempunyai antara muka sebagai jenis pulangan. Ini menimbulkan persoalan bagaimana untuk melaksanakan kaedah sedemikian.
Pertimbangkan contoh kod yang disediakan:
type IA interface { FB() IB } type IB interface { Bar() string } type A struct { b *B } func (a *A) FB() *B { return a.b } type B struct{} func (b *B) Bar() string { return "Bar!" }
Apabila cuba menyusun kod ini, ralat berlaku kerana kaedah FB struct A kembali a *B jenis konkrit dan bukannya jenis antara muka IB yang diperlukan.
Untuk menyelesaikan isu ini, cuma ubah suai kaedah FB dalam A struct untuk mengembalikan jenis antara muka IB:
func (a *A) FB() IB { return a.b }
Kini, struct A melaksanakan antara muka IA dengan betul dan boleh digunakan sebagai jenis IA.
Dalam kes di mana antara muka ditakrifkan dalam pakej yang berbeza, masih mungkin untuk melaksanakan kaedah dengan sewajarnya. Sebagai contoh, jika IA dan IB ditakrifkan dalam pakej foo dan pelaksanaan berada dalam bar pakej, pengisytiharan dan pelaksanaan adalah seperti berikut:
Pengisytiharan (dalam pakej foo):
type IA interface { FB() IB }
Pelaksanaan (dalam bar pakej):
func (a *A) FB() foo.IB { return a.b }
Dengan menghantar nilai yang dikembalikan kepada jenis antara muka yang diperlukan, pelaksanaan boleh mematuhi antara muka yang diperlukan dan berjaya menyusun.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Kaedah Antara Muka dengan Jenis Pulangan Antara Muka dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!