package main
import "fmt"
// 定义一个接口,表示可以计算面积的类型
type AreaCalculator interface {
CalculateArea() float64
}
// 定义一个表示圆的结构体
type Circle struct {
radius float64
}
// 实现 AreaCalculator 接口
func (c Circle) CalculateArea() float64 {
return 3.14 * c.radius * c.radius
}
// 定义一个表示矩形的结构体
type Rectangle struct {
width, height float64
}
// 实现 AreaCalculator 接口
func (r Rectangle) CalculateArea() float64 {
return r.width * r.height
}
// 使用接口作为参数类型,打印不同形状的面积
func printArea(a AreaCalculator) {
fmt.Printf("面积: %f\n", a.CalculateArea())
}
func main() {
circle := Circle{radius: 5}
rectangle := Rectangle{width: 10, height: 20}
printArea(circle)
printArea(rectangle)
}
这段代码首先定义了一个AreaCalculator
接口,表示可以计算面积的类型。然后定义了两个结构体Circle
和Rectangle
,分别用于表示圆和矩形,并且实现了AreaCalculator
接口。printArea
函数接受任何实现了AreaCalculator
接口的类型作为参数,并打印出它们的面积。最后在main
函数中创建了Circle
和Rectangle
的实例,并调用printArea
函数来计算并打印它们的面积。这个例子展示了Go语言中接口的使用以及多态性的实现。