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

為什麼我的Go介面方法回傳類型會導致編譯錯誤?

Linda Hamilton
發布: 2024-11-09 22:38:02
原創
744 人瀏覽過

Why Does My Go Interface Method Return Type Cause a Compilation Error?

介面方法傳回型別作為Go 中的介面

問題:

問題:
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
登入後複製
問題:

實作介面中傳回介面類型的方法可能會導致編譯錯誤。請考慮以下程式碼:

執行此程式碼會導致以下錯誤:

func (a *A) FB() IB {
    return a.b
}
登入後複製

解決方案:

解決此問題, FB方法的傳回類型必須與IA介面中指定的類型相符。因此,需要進行以下更改:

透過此修改,程式碼將成功編譯,因為 FB 的回傳類型現在為 IB,如 IA 介面中所定義。
import (
    "foo" // Package containing IB interface
)

// Implementation in package bar
func (a *A) FB() foo.IB {
    return a.b
}
登入後複製
其他注意事項:如果IA 和IB 介面定義在單獨的套件中,則套件的import 語句包含IB 的檔案必須包含在實作FB 方法的文件中。此外,FB 的回傳類型必須使用適當的套件名稱來限定:

以上是為什麼我的Go介面方法回傳類型會導致編譯錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!