Go 函數類型傳回的結構體與介面不相容
問題:
問題:在Go 中,為什麼傳回實作介面的結構的函數是否不滿足期望欄位的類型要求傳回該介面的函數?
答案:問題在於返回結構體的 Go 函數類型與返回結構體的函數類型不能互換接口,即使該結構實現了該接口。在為結構體中的函數聲明類型簽署時,特定的返回類型必須與聲明的類型相符。修改工廠函數直接傳回介面類型即可解決問題。
package main import "fmt" func main() { thing := structToConstruct{getInstance} thing.performAction() } type myInterface interface { doSomething() } type structToConstruct struct { factoryFunction func() myInterface } func (s *structToConstruct) performAction() { instance := s.factoryFunction() instance.doSomething() } func getInstance() myInterface { return &myStruct{} } type myStruct struct{} func (m *myStruct) doSomething() { fmt.Println("doing something") }
範例:
本例修改工廠函數傳回實例myInterface的,滿足以下類型要求structToConstruct.
說明:func wrapper() myInterface { return expensive.CreateInstance() } thing := structToConstruct{wrapper}
以上是為什麼 Go 函數傳回實作介面的結構體不滿足介面回傳函數欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!