为什么我可以说 CreateLion() 的结果(指向实现 Cat 接口的结构的指针)是 Cat 接口的实例,但我不能说 CreateLion() 是“返回 Cat 的函数”类型界面。”
实现此类行为的标准 Golang 方法是什么?
package main
import "fmt"
func main() {
var lion Cat := CreateLion()
lion.Meow()
// this line breaks. Why?
var cf CatFactory = CreateLion
}
type Cat interface {
Meow()
}
type Lion struct {}
func (l Lion) Meow() {
fmt.Println("Roar")
}
// define a functor that returns a Cat interface
type CatFactory func() Cat
// define a function that returns a pointer to a Lion struct
func CreateLion() *Lion {
return &Lion{}
}
尝试这个:
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{}
or func() interface{}
。
在这种情况下,类型必须相同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)