接口中的构造方法? (在Golang)

时间:2013-10-27 06:37:47

标签: constructor struct go inheritance go-interface

如果我有以下界面和结构:

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()方法。我怎么能这样做?

2 个答案:

答案 0 :(得分:6)

在Go中,无法在Interfaces上创建方法。

而不是为接口创建方法,惯用的方法是创建以接口为参数的函数。在你的情况下,它将采用一个Shape,使用反射包返回相同类型的New实例:

func New(s Shape) Shape { ... }

另一种可能性是将接口嵌入到struct类型中,而不是在struct类型上创建New-method。

游乐场示例:http://play.golang.org/p/NMlftCJ6oK

答案 1 :(得分:0)

不,你不能那样做。接口的设计并不像构造函数那样。构造函数不是你在实例上调用的东西。