Dalam Go, ralat mungkin akan berlaku semasa cuba melaksanakan antara muka dengan jenis pulangan yang juga merupakan antara muka. Soalan ini membincangkan isu ini, menyediakan penyelesaian yang menyelesaikan ralat.
Kod yang disediakan menunjukkan antara muka IA dengan kaedah FB(), yang dijangka mengembalikan antara muka IB. Walau bagaimanapun, pelaksanaan FB dalam struct A mengembalikan jenis konkrit *B dan bukannya IB.
Untuk membetulkan ralat ini, cuma ubah suai jenis pulangan FB dalam struct A menjadi IB dan bukannya *B:
func (a *A) FB() IB { return a.b }
Pindaan ini memastikan A melaksanakan antara muka IA dengan betul dan menyelesaikan ralat.
Soalan juga bertanya tentang mentakrifkan antara muka dalam pakej berasingan. Pendekatan ini boleh dilaksanakan dalam Go, membolehkan anda berkongsi antara muka merentas pakej yang berbeza. Walau bagaimanapun, apabila pelaksanaan berada dalam pakej yang berbeza, anda perlu menggunakan nama antara muka yang layak sepenuhnya dalam pelaksanaan.
Sebagai contoh, jika IA dan IB ditakrifkan dalam pakej foo dan pelaksanaan berada dalam bar pakej, pengisytiharan dalam bar pakej ialah:
type IA interface { FB() foo.IB }
Sementara pelaksanaan dalam bar akan menjadi:
func (a *A) FB() foo.IB { return a.b }
Pelarasan ini memastikan bahawa jenis pemulangan FB sepadan dengan jenis yang dijangkakan yang dinyatakan dalam Antara muka IA, tanpa mengira pakej yang mana antara muka ditakrifkan.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Antara Muka dengan Antara Muka sebagai Jenis Pulangan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!