2017-04-21 113 views
1

给出是否可以扩展go结构构造函数?

type Rectangle struct { 
    h, w int 
} 

func (rec *Rectangle) area() int { 
    return rec.w * rec.h 
} 

您可以定义使用矩形一个Square结构,这样我就可以利用面积法的?如果不可能,这绝对没问题。我不会判断语言,也不会哭泣或不高兴。我只是在学习golang。

+0

Go没有构造,你的意思是这样的?:https://play.golang.org/p/ra3Wl0I0kM – JimB

+0

可能的语法我能__imagine__是'广场{2}'而比'Square {Rectangle {2,2}}'。 –

+0

即使在Go中有继承的概念,我也不确定你会如何想象它会起作用。 'Square {2}'只是一个字面值,它不会做任何事情。 – JimB

回答

2

Go不是面向对象的,所以它没有继承性。它也没有构造函数。它所具有的是嵌入。因此,这是可能的:

type Rectangle struct { 
    h, w int 
} 

func (rec *Rectangle) area() int { 
    return rec.w * rec.h 
} 

type Square struct { 
    Rectangle 
} 

主要这里的限制是没有办法为area()方法来访问,只有在Square存在的领域。

0

我开始知道实现这种行为的预期方式是编写普通函数。见MakeSquare

type Rectangle struct { 
    h, w int 
} 

func (rec *Rectangle) area() int { 
    return rec.w * rec.h 
} 

type Square struct { 
    Rectangle 
} 

func MakeSquare(x int) (sq Square) { 
    sq.h = x 
    sq.w = x 
    return 
} 

func Test_square(t *testing.T) { 
    sq := MakeSquare(3) 
    assert.Equal(t, 9, sq.area()) 
}