为什么我可以说 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{}
}
原文由 zian 发布,翻译遵循 CC BY-SA 4.0 许可协议
尝试这个:
在大多数情况下,您可以将任何类型分配给基类型
interface{}
。但是,如果函数参数的类型是map[T]interface{}
,[]interface{}
或func() interface{}
--- ,情况就会发生变化。在这种情况下,类型必须相同。