1 回答
TA贡献1806条经验 获得超5个赞
将方法添加到它不会“污染”的类型。
但是有一种方法可以在不重复的情况下实现你想要的。使用方法定义一个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
自动执行Areaer
。测试它:
rect := Rectangle{5, 4, Area{20}}
square := Square{5, Area{25}}
got := SumGeometries(rect, square)
want := 45
if got != want {
fmt.Println("fail!")
}
什么都不输出(没有错误)。在Go Playground上尝试一下。
请注意,如果Area仅包含单个字段,您甚至可以省略包装器结构并int直接用作基础类型:
type Area int
func (a Area) GetArea() int {
return int(a)
}
然后使用它更简单:
rect := Rectangle{5, 4, 20}
square := Square{5, 25}
在Go Playground试试这个。
- 1 回答
- 0 关注
- 117 浏览
添加回答
举报