3 回答

TA貢獻1828條經驗 獲得超4個贊
嘗試這個:
package main
import "fmt"
type Cat interface {
Meow()
}
type Lion struct{}
func (l Lion) Meow() {
fmt.Println("Roar")
}
type CatFactory func() Cat
func CreateLion() Cat {
return Lion{}
}
func main() {
lion := CreateLion()
lion.Meow()
var cf CatFactory = CreateLion
fLion := cf()
fLion.Meow()
}
在大多數情況下,您可以將任何類型分配給基本類型interface{}。但是如果函數參數的類型是 a或map[T]interface{},情況就會改變。在這種情況下,類型必須相同。[]interface{}func() interface{}

TA貢獻1798條經驗 獲得超3個贊
我認為你應該閱讀這個博客http://blog.golang.org/laws-of-reflection,它對變量、類型和接口之間的關系很準確。
在您的示例*Lion
中與Cat
.
您可以更正CreateLion
從*Lion
到 的函數返回Cat
。

TA貢獻1802條經驗 獲得超5個贊
這里的問題是靜態類型的 go 將“這是一個返回貓的函數”與“這是一個返回貓的獅子的函數”區分開來,因此不會接受一個作為另一個。
解決這個問題的方法是讓你的工廠變量完全符合它的期望:
var cf CatFactory = func() Cat{
return CreateLion()
}
catlion := cf()
catlion.Meow()
- 3 回答
- 0 關注
- 219 瀏覽
添加回答
舉報