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 关注
- 179 浏览
添加回答
举报