1 回答

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊
將方法添加到它不會(huì)“污染”的類型。
但是有一種方法可以在不重復(fù)的情況下實(shí)現(xiàn)你想要的。使用方法定義一個(gè)Area包含公共(此處Area)字段的類型GetArea():
type Area struct {
Value int
}
func (a Area) GetArea() int {
return a.Value
}
并將其嵌入其他類型:
type Rectangle struct {
Width, Height int
Area
}
type Square struct {
Side int
Area
}
這樣該GetArea()
方法得到提升,Rectangle
并將Square
自動(dòng)執(zhí)行Areaer
。測試它:
rect := Rectangle{5, 4, Area{20}}
square := Square{5, Area{25}}
got := SumGeometries(rect, square)
want := 45
if got != want {
fmt.Println("fail!")
}
什么都不輸出(沒有錯(cuò)誤)。在Go Playground上嘗試一下。
請(qǐng)注意,如果Area僅包含單個(gè)字段,您甚至可以省略包裝器結(jié)構(gòu)并int直接用作基礎(chǔ)類型:
type Area int
func (a Area) GetArea() int {
return int(a)
}
然后使用它更簡單:
rect := Rectangle{5, 4, 20}
square := Square{5, 25}
在Go Playground試試這個(gè)。
- 1 回答
- 0 關(guān)注
- 140 瀏覽
添加回答
舉報(bào)