在线文档 > Golang练习 > 接口
Go语言接口interface
,是方法签名的命名集合。
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 中实现接口,我们只需要实现接口中的所有方法。这里我们在 rect 上实现 geometry。
func (r rect) area() float64 {
return r.width * r.height
}
func (r rect) perim() float64 {
return 2*r.width + 2*r.height
}
// circle 的实现。
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
要了解有关 Go 接口的更多信息,请查看这篇很棒的博客文章。