Go 接口方法返回接口與返回具體類型的方法不匹配
問題:
只有當實作類型宣告了介面本身,而不是實作介面的特定類型時,傳回介面的介面方法才有效。
問題:
我們如何解決這個問題,同時避免修改第三方具體類型或直接與它們進行介面?
答案:
為了協調介面不匹配,我們採用封裝技術:
1。包裝技術:
創建一個新類型來包裝第三方具體類型並提供所需的接口:
<code class="go">type MyBar Bar func (b *MyBar) GetStringer() fmt.Stringer { return &Foo{"foo"} }</code>
這種方法允許自定義所需的接口,而不影響原始混凝土類型。
2.嵌入類型技術:
將第三方具體類型嵌入到新類型中並提供所需的介面實作:
<code class="go">type MyBar struct{ Bar } func (b *MyBar) GetStringer() fmt.Stringer { return b.Bar.GetStringer() }</code>
嵌入保留了原始具體類型的功能,同時使用所需的介面來擴展它。
這些技術可以建立符合指定介面的自訂類型,即使原始具體類型不符合。它們提供了一種靈活的方法將第三方類型整合到更廣泛的基於介面的系統中。
以上是使用具體類型實作介面方法時如何處理介面不符?的詳細內容。更多資訊請關注PHP中文網其他相關文章!