接口是方法签名的命名集合。
package main
import (
"fmt"
"math"
)
// 以下是一个用于几何图形的基础接口。
type geometry interface {
area() float64
perim() float64
}
// 在我们的示例中,我们将在 rect 和 circle 类型上实现这个接口。
type rect struct {
width, height float64
}
type circle struct {
radius float64
}
// 要在 Go 中实现一个接口,我们只需实现接口中的所有方法。这里我们在矩形上实现了 geometry 接口。
func (r rect) area() float64 {
return r.width * r.height
}
func (r rect) perim() float64 {
return 2*r.width + 2*r.height
}
// 对圆形的实现。
func (c circle) area() float64 {
return math.Pi * c.radius * c.radius
}
func (c circle) perim() float64 {
return 2 * math.Pi * c.radius
}
// 如果一个变量具有接口类型,那么我们可以调用该接口中定义的方法。以下是一个通用的 measure 函数,利用这一特性来处理任何实现了 geometry 接口的类型。
func measure(g geometry) {
fmt.Println(g)
fmt.Println(g.area())
fmt.Println(g.perim())
}
func main() {
r := rect{width: 3, height: 4}
c := circle{radius: 5}
// circle 和 rect 结构体类型都实现了 geometry 接口,因此我们可以将这些结构体的实例作为参数传递给 measure 函数。
measure(r)
measure(c)
}运行结果:
$ go run interfaces.go
{3 4}
12
14
{5}
78.53981633974483
31.41592653589793原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。