码迷,mamicode.com
首页 > 编程语言 > 详细

020_go语言中的接口

时间:2018-04-01 19:57:54      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:实例   print   ace   参数   接口   ack   try   block   AC   

代码演示

package main

import (
    "fmt"
    "math"
)

type geometry interface {
    area() float64
    perim() float64
}

type rect struct {
    width, heigh float64
}

type circle struct {
    radius float64
}

func (r rect) area() float64 {
    return r.width * r.heigh
}

func (r rect) perim() float64 {
    return 2*r.width + 2*r.heigh
}

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

func (c circle) perim() float64 {
    return 2 * math.Pi * c.radius
}

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

func main() {
    r := rect{width: 3, heigh: 4}
    c := circle{radius: 5}

    measure(r)
    measure(c)
}

代码运行结果

{3 4}
12
14
{5}
78.53981633974483
31.41592653589793

代码解读:

  • 接口是一个方法签名的集合体,方法签名就是方法的声明,要想实现一个接口,就必须将接口里的所有方法都实现了
  • 上述例子中,我们要实现一个接口,这个接口包括两个方法,分别是计算面积和周长
  • 以上,我们要用长方形和圆,来实现这个接口,所以我们最终要实现长方形和圆的面积和周长的计算方法
  • 首先定义长方形和圆的结构体
  • 然后分别实现长方形的面积和周长计算方法,圆的面积和周长计算方法
  • 最终,我们将长方形和圆的结构体实例化,赋予具体的值
  • 这样,我们就实现了接口内所有的方法。以后我们可以用函数measure来接收这个接口,可以将长方形的实例当做参数传给接口,得到长方形的面积和周长,同理也可以得到圆的面积和周长

020_go语言中的接口

标签:实例   print   ace   参数   接口   ack   try   block   AC   

原文地址:https://www.cnblogs.com/Joestar/p/8687687.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!