go语言中interface的实践

栏目: Go · 发布时间: 7年前

package main

import (
    "fmt"
    "math"
)

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

type square struct {
    width, height float64
}

type circle struct {
    radius float64
}

//要在 go 中实现一个接口,我们只需要实现接口中的所有方法

//`square`的实现,s接收者接受了area()方法
func (s square) area() float64 {
    return s.width * s.height

}

//`square`的实现,s接收者接受了perim()方法
func (s square) perim() float64 {
    return 2*s.width + 2*s.height

}

//`circle`的实现,c接收者接受了area()方法
func (c circle) area() float64 {
    return math.Pi * c.radius * c.radius

}

//`circle`的实现,c接收者接受了perim()方法
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()  {

    //定义并初始化square、circle struct,可以理解为结构体的实例?结构体的接收者?
    s := square{width: 3, height: 4}
    c := circle{radius: 5}

    measure(s)
    measure(c)
}

//output:
{3 4}
12
14
{5}
78.53981633974483
31.41592653589793

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

编程的修炼(中英双语)

编程的修炼(中英双语)

[荷]Edsger W. Dijkstra / 裘宗燕 / 电子工业出版社 / 2013-7 / 79.00元

本书是图灵奖获得者Edsger W. Dijkstra在编程领域里的经典著作中的经典。作者基于其敏锐的洞察力和长期的实际编程经验,对基本顺序程序的描述和开发中的许多关键问题做了独到的总结和开发。书中讨论了顺序程序的本质特征、程序描述和对程序行为(正确性)的推理,并通过一系列从简单到复杂的程序的思考和开发范例,阐释了基于严格的逻辑推理开发正确可靠程序的过程。 本书写于20世纪70年代中后期,但......一起来看看 《编程的修炼(中英双语)》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具