秒懂golang接口

接口详解

  • 多态,指代码可以根据类型的具体实现采取不同行为的能力

    • pythonC++中都有继承类的方法重写,来实现多态
  • 拿C++中的经典例子来看,求面积和周长

    • 分别定义了circle和rectangle类型和返回其周长和面积的方法函数
    • 通过geometry类型接口,声明了这两个方法
    • 在measure函数中,函数的接收者是一个接口类型变量
    • 但是在调用的时候,是可以直接把circle和rectangle类型的变量塞进去的,就是因为这两个类型的变量实现了接口中所声明的所有方法,从而实现了多态,一个measure函数hold住所有实现了这个接口的数据类型???
package main

import (
	"fmt"
	"math"
)

type geometry interface {
	area() float32
	perimeter() float32
}

type rect struct {
	width, height float32
}
type circle struct {
	radius float32
}

func (r rect) area() float32 {
	return r.height * r.width
}

func (c circle) area() float32 {
	return math.Pi * c.radius * c.radius
}

func (r rect) perimeter() float32 {
	return 2 * (r.height + r.width)
}

func (c circle) perimeter() float32 {
	return 2 * math.Pi * c.radius
}

func measure(g geometry) {
	fmt.Println(g.area())
	fmt.Println(g.perimeter())
}

func main() {
	r := rect{3, 4}
	c := circle{3}
	measure(r)
	measure(c)
}

执行结果:

12
14
28.274334
18.849556

你可能感兴趣的:(秒懂golang接口)