介面方法傳回型別作為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中文網其他相關文章!