Kaedah Antara Muka Jenis Kembali sebagai Antara Muka dalam Go
Soalan:
Melaksanakan antara muka kaedah yang mengembalikan jenis antara muka dalam Golang boleh menyebabkan ralat penyusunan. Pertimbangkan kod berikut:
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!" }
Menjalankan kod ini menyebabkan ralat berikut:
cannot use a (type *A) as type IA in function argument: *A does not implement IA (wrong type for FB method) have FB() *B want FB() IB
Penyelesaian:
Untuk menyelesaikan isu ini , jenis pemulangan kaedah FB mesti sepadan dengan jenis yang dinyatakan dalam antara muka IA. Oleh itu, perubahan berikut diperlukan:
func (a *A) FB() IB { return a.b }
Dengan pengubahsuaian ini, kod akan berjaya disusun kerana jenis pemulangan FB kini ialah IB, seperti yang ditakrifkan dalam antara muka IA.
Pertimbangan Tambahan:
Jika antara muka IA dan IB ditakrifkan dalam pakej berasingan, penyataan import untuk pakej yang mengandungi IB mesti disertakan dalam fail di mana kaedah FB dilaksanakan. Selain itu, jenis pemulangan FB mesti memenuhi syarat dengan nama pakej yang sesuai:
import ( "foo" // Package containing IB interface ) // Implementation in package bar func (a *A) FB() foo.IB { return a.b }
Atas ialah kandungan terperinci Mengapa Kaedah Antara Muka Go Saya Jenis Pulangan Menyebabkan Ralat Penyusunan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!