下面的代码确实是不言自明的。
我怎么能说CreateLion()的结果(指向实现Cat接口的结构的指针)是Cat接口的实例,但我不能说CreateLion()的类型是"返回Cat的函数" 接口。"
Golang实现这种行为的标准方法是什么?
尝试这个:
在大多数情况下,可以将任何类型分配给基本类型
在这种情况下,类型必须相同。
我认为您应该阅读此博客http://blog.golang.org/laws-of-reflection,它非常了解变量,类型和接口之间的关系。
在您的示例中,
您可以更正功能
这里的问题是静态类型的go将"这是一个返回猫的函数"与"这是一个返回猫的狮子的函数"区分开来,因此不会彼此接受。
解决此问题的方法是为工厂var提供准确的期望值:
进行一些更改即可正常工作。在这里查看:https://play.golang.org/p/ECSpoOIuzEx
另外,尽管Go没有Java样式的接口,但它确实具有接口并且可以实现多态,但是类型在编译时就已知。
如果两种类型都实现相同的接口,则可以为"是"关系建模。但是,在将对象传递到接受该接口类型的函数之前,它不会强制执行该接口。因此,如果您想实现策略模式,则在传递策略对象匹配接口" Cat"时,该函数将接受" Lion"对象,或任何其他使用正确签名实现Meow函数的类。
此外,工厂方法在Go中绝对必要且有用。实际上,在Go中,您可以使用工厂函数代替构造函数来构造对象。