首頁 > 後端開發 > Golang > 主體

Golang中如何實作介面方法回傳介面?

Linda Hamilton
發布: 2024-11-11 06:29:02
原創
320 人瀏覽過

How to Implement Interface Methods Returning Interfaces in Golang?

在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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板