在Go 中,嘗試以介面實作介面時可能會遇到錯誤回傳類型也是一個接口。這個問題深入研究了這個問題,並提供了解決錯誤的解決方案。
提供的程式碼示範了具有方法 FB() 的介面 IA,該方法預計會返回介面 IB。然而,struct A 中 FB 的實作會傳回具體類型 *B 而不是 IB。
要修正此錯誤,只需將struct A 中FB 的回傳類型修改為IB 而不是*B:
func (a *A) FB() IB { return a.b }
此變更可確保A 正確實作IA 介面並解決錯誤。
該問題也詢問如何在單獨的套件中定義介面。這種方法在 Go 中是可行的,可讓您在不同的套件之間共用介面。但是,當實作位於不同的套件中時,需要在實作中使用完全限定的介面名稱。
例如,如果IA 和IB 定義在套件foo 中,並且實作位於套件bar 中, bar 套件中的聲明將是:
type IA interface { FB() foo.IB }
而bar 中的實作將變為:
func (a *A) FB() foo.IB { return a.b }
此調整確保FB 的回傳類型與IA介面中指定的預期類型匹配,無論定義該介面的套件為何。
以上是如何在 Go 中實現以介面作為返回類型的介面?的詳細內容。更多資訊請關注PHP中文網其他相關文章!