020_go语言中的接口

代码演示

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来接收这个接口,可以将长方形的实例当做参数传给接口,得到长方形的面积和周长,同理也可以得到圆的面积和周长

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

时间: 2024-08-30 12:48:04

020_go语言中的接口的相关文章

go语言中的接口interface

package main; import "fmt" //接口interface //接口是一个或多个方法签名的集合 //只要某个类型拥有该接口的所有方法签名,即算实现该接口. //接口只有方法声明,没有实现,没有数据字段 //接口可以匿名嵌入其它接口,或嵌入到结构中. //GO语言中的所有类型都实现了空接口 type Empty interface { } type Inf interface { getName() string; setName(name string); } t

java语言中的接口概述

接口 接口中的成员修饰符是固定的 1,全局常量:public staticfinal 2,抽象方法:public abstract 接口中的成员都是公共的权限. 类与类之间是继承关系,类与接口之间是实现关系. 接口不可以实例化 只能有实现了接口的子类并覆盖了接口中所有的抽象方法后,该子类才可以实例化.否则,这个子类就是一个抽象类. 调用接口的常量时,接口名,接口的子类名,子类的对象都可以进行调用. 在java中不直接支持多继承,因为会出现调用的不确定性. 所以java将多继承机制进行改良,在ja

go语言之行--接口(interface)、反射(reflect)详解

一.interface简介 interface(接口)是golang最重要的特性之一,Interface类型可以定义一组方法,但是这些不需要实现.并且interface不能包含任何变量. 简单的说: interface是方法的集合 interface是一种类型,并且是指针类型 interface的更重要的作用在于多态实现 interface定义 type 接口名称 interface { method1 (参数列表) 返回值列表 method2 (参数列表) 返回值列表 ... } interf

Java语言中反射动态代理接口的解释与演示

Java语言中反射动态代理接口的解释与演示 Java在JDK1.3的时候引入了动态代理机制.可以运用在框架编程与平台编程时候捕获事件.审核数据.日志等功能实现,首先看一下设计模式的UML图解: 当你调用一个接口API时候,实际实现类继承该接口,调用时候经过proxy实现. 在Java中动态代理实现的两个关键接口类与class类分别如下: java.lang.reflect.Proxy java.lang.reflect.InvocationHandler 我们下面就通过InvocationHan

Java语言中的----抽象类、接口

day12  Java语言中的抽象类与接口 一.抽象类和接口概述; 在昨天我们学习了Java的继承功能,这个是一个核心知识点,今天我们再继承的基础之上学习一下抽象类和接口这两个知识.什么是抽象类?如何定义一个抽象类?如何使用一个抽象类?这些都是我们需要掌握的. 同时我们还要知道如何来定义一个接口,在开发中定义接口来实现相关的功能是一个很重要的功能.如何来实现接口中的抽象方法,这些在这一节都会说到. 二.抽象类和接口 1.抽象类: 什么是抽象类?包含抽象方法的类就叫做抽象类 .使用abstract

go语言中在变量后加上接口是什么意思?

如题刚刚开始学习go 语言有些不懂: a.Data = make(map[string]interface{}) 我认为它是在申请a.Data map为字符串类型的空间,那么它后面接一个空的interface是什么意思? go语言中在变量后加上接口是什么意思? >> golang 这个答案描述的挺清楚的:http://www.goodpm.net/postreply/golang/1010000008853468/go语言中在变量后加上接口是什么意思.html

C语言中内存的管理

一  Handler作用和概念 包含线程队列和消息队列,实现异步的消息处理机制,跟web开发的ajax有异曲同工之妙. 1.运行在某个线程上,共享线程的消息队列: 2.接收消息.调度消息,派发消息和处理消息: 3.实现消息的异步处理: Handler能够让你发送和处理消息,以及Runnable对象:每个Handler对象对应一个Thread和Thread的消息队列.当你创建一个Handler时,它就和Thread的消息队列绑定在一起,然后就可以传递消息和runnable对象到消息队列中,执行消息

漫谈Java程序设计中的接口应用

Java语言提供了一种接口(interface)机制.这种接口机制使Java的面向对象编程变得更加灵活.我们可以用接口来定义一个类的表现形式,但接口不能包含任何实现.在<Thinking in Java>一书中,作者对接口有这样的描述:“接口(interface)比抽象(abstract)的概念更进了一步.你可以把一个接口看成是一个纯的抽象类.”我认为作者对接口的这一解释再准确不过了. 理解并用好接口机制将帮助我们更好的掌握Java这种面向对象的编程语言.下面我们来讨论一下接口的使用规则以及相

Go语言中使用MySql数据库

Go语言中使用MySql数据库 1.MySQL驱动 Go中支持MySQL的驱动目前比较多,有如下几种,有些是支持database/sql标准,而有些是采用了自己的实现接口,常用的有如下几种: https://github.com/Go-SQL-Driver/MySQL 支持database/sql,全部采用go写. https://github.com/ziutek/mymysql 支持database/sql,也支持自定义的接口,全部采用go写. https://github.com/Phil