2017-04-21 108 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()) 
}