在Golang 中實作回傳介面的介面方法
當嘗試實作一個傳回另一個介面的介面時,回傳時會出現常見錯誤方法的類型與介面中定義的預期類型不符。考慮以下程式碼片段:
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!" }
執行此程式碼將導致以下錯誤:
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
解:
問題在於A結構體中FB方法的回傳類型。 IA 介面期望 FB 回傳 IB,但在實作中,它會傳回 *B。若要修正此問題,請修改FB 到IB 的回傳類型,如下所示:
func (a *A) FB() IB { return a.b }
跨套件共用介面:
可以在不同套件中定義接口並分享它們。在這種情況下,在結構體中實作介面時,必須使用完整的包路徑作為方法的回傳類型。例如,如果 IA 和 IB 定義在名為 foo 的套件中,並且實作在名為 bar 的套件中,則聲明將為:
type IA interface { FB() foo.IB }
並且實作將為:
func (a *A) FB() foo.IB { return a.b }
以上是Golang中如何實作介面方法回傳介面?的詳細內容。更多資訊請關注PHP中文網其他相關文章!