如果我有以下界面和结构:
package shape
type Shape interface {
Area()
}
type Rectangle struct {
}
func (this *Rectangle) Area() {}
func New() Shape {
return &Rectangle{}
}
那么如何将New()
方法(作为构造函数)添加到接口Shape
中?
用例是,如果我有另一个结构Square
type Square struct {
Rectangle
}
然后Square
将有一个方法Area()
。但它没有New()
。我的目的是让任何继承Shape
的结构自动拥有New()
方法。我怎么能这样做?
答案 0 :(得分:6)
在Go中,无法在Interfaces上创建方法。
而不是为接口创建方法,惯用的方法是创建以接口为参数的函数。在你的情况下,它将采用一个Shape,使用反射包返回相同类型的New实例:
func New(s Shape) Shape { ... }
另一种可能性是将接口嵌入到struct类型中,而不是在struct类型上创建New-method。
答案 1 :(得分:0)
不,你不能那样做。接口的设计并不像构造函数那样。构造函数不是你在实例上调用的东西。