我有一个界面
type Shape interface {
area() float32
circumference() float32
}
我想创建不同的形状,例如圆形和矩形,对于圆形我需要知道半径,对于矩形需要两个边。因此,每个代码都如下所示:
type DataCircle struct {
radius float
}
(*DataCircle) area() float32 {
return 3.14 * DataCircle.radius * DataCircle.radius;
}
(*DataCircle) circumference() float32 {
return 2 * 3.14 * DataCircle.radius;
}
类似地,我们有一个矩形的代码,该代码实现了Shape的接口,并带有以下struct
type DataRectangle struct {
side1 float
side2 float
}
我想创建许多不同的矩形和许多不同的圆,每个圆都有不同的半径/边。最后,我想将它们放在一个数组中,并能够执行以下操作
for _, shape := range all_shapes_in_array {
fmt.Printf("%f %f", shape.area(), shape.circumference())
}
在普通的面向对象语言中,这很简单,但是如何在Golang中实现呢?
答案 0 :(得分:2)
只要您的DataCircle
和DataRectangle
结构实现Shape
接口,您就可以创建类型为Shape
的数组/切片并对其进行迭代。 / p>
如果您已经让他们实现Shape
,那么您要做的就是:
circle1 := &DataCircle{1}
circle2 := &DataCircle{2}
rec1 := &DataRectangle{1, 1}
rec2 := &DataRectangle{4, 1}
all_shapes_in_array := []Shape{circle1, circle2, rec1, rec2}
for _, shape := range all_shapes_in_array {
fmt.Printf("%f %f", shape.area(), shape.circumference())
}
它将按预期工作。