其他开发语言例如java,实现类需要显式的指明需要实现哪些接口,Go不需要,你的struct对象只要包含了接口定义的方法就可以认为你实现了这个接口。
例子
package main
import (
"fmt"
)
// 定义一个接口
type Shape interface {
// 定义一个Area方法, 返回面积
Area() float64
}
// 定义矩形类
type Rectangle struct {
width float64
height float64
}
// 实现Area,返回矩形面积,这里没有显式的注明实现了Shape接口,但是实现了Shape接口的Area方法,这就是Go接口的隐式实现。
func (r Rectangle) Area() float64 {
return r.width * r.height
}
// 定义圆形类
type Circle struct {
radius float64
}
// 实现Area,返回圆形面积
func (c Circle) Area() float64 {
return 3.14 * c.radius * c.radius
}
func main() {
// 初始化矩形和圆形对象
r := Rectangle{10, 20}
c := Circle{10}
// 定义shape接口类型
var s Shape
// 因为Rectangle和Circle都实现了Shape接口,因此接口变量s可以接受Rectangle和Circle对象的赋值,对于接口变量s而言,Area方法可能有多种实现,但是只要调用s.Area()方法就可以得到面积,这就是多态的特性之一。
s = r
fmt.Println("Area of Rectangle: ", s.Area())
s = c
fmt.Println("Area of Circle: ", s.Area())
}