秒懂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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值