接口

在Go语言中接口是一种类型,只要实现了这个接口方法的
就属于这个类型

在JAVA中
定义一个鸭子接口
那什么是鸭子?
鸭子是会嘎嘎嘎叫的
鸭子可以在水里游
等等。。。
那反过来
如果不能嘎嘎嘎叫,不能在水里游就不是鸭子

在go语言中没有那么多要求
只要你长得鸭子
那就你可以实现我这个接口
不管这个鸭子会不会叫
或者是玩具鸭子
只要实现了我这个接口方法
就是个鸭子

定义一个接口

定义一个鸭子类型的接口
只要实现了swim()方法
就是ducker类型


type ducker interface {swim()
}
接口实现
package mainimport "fmt"func main() {//定义一个ducker 变量var d  ducker//定义一个toyboy的结构体var t = toyDuck{price:32.2}//因为 tiyduck变量实现了 swim方法//我们说了 只要实现了接口的全部方法//那么就可以是接口这个类型d = tfmt.Printf("type :%T\n",d)//使用 ducker类型调用 swim方法d.swim()//输出// type :main.toyDuck// 这个价值32.20的玩具鸭在水上浮起来了
}type ducker interface {swim()
}type toyDuck struct {price float64
}func ( t toyDuck) swim(){//小数点后取两位输出fmt.Printf("这个价值%0.2f的玩具鸭在水上浮起来了\n",t.price)
}
接口应用场景 (一个接口多个实现)

实现一个不管是什么车都可以跑的接口

首先定义一个车的接口类型

type carer interface{run()
}

定义一个函数 不管传过来什么都可以调用run方法
这里参数 就是carer 类型
只要实现了run方法都是carer类型
所以可以调用carer.run()

func drive(x carer) {x.run()
}

完整代码

package mainimport "fmt"
//不管是什么牌子的车都能跑
func main() {b1 := bmw{model: "745"}b2 := benz{model: "G500"}drive(b1)drive(b2)}//接口等于定义 通用变量 (实现此方法的)
type carer interface {run()
}func drive(x carer) {x.run()
}type benz struct {model string
}type bmw struct {model string
}func (b benz) run() {fmt.Printf("奔驰%s咻的走了\n", b.model)
}
func (b bmw) run() {fmt.Printf("宝马%s嗖的走了\n", b.model)
}
接口多实现

一个结构体 也可以实现多个接口
可以是多个接口的类型
例如 玩具鸭 既是玩具 也是鸭子

package mainimport "fmt"func main() {var td = toyDuck{price:32.8}var d ducker = tdvar t toyer  = tdd.swim()t.show()
}type ducker interface {swim()
}type toyer interface {show()
}type toyDuck struct {price float64
}func ( t toyDuck) swim(){//小数点后取两位输出fmt.Printf("这个价值%0.2f的玩具鸭在水上浮起来了\n",t.price)
}func ( t toyDuck) show(){//小数点后取两位输出fmt.Printf("这个价值%0.2f的玩具鸭在玻璃柜里展示着\n",t.price)
}
注意

只有实现了接口的全部方法 才是这个接口的类型
接口的实现方法多使用指针类型

package mainimport "fmt"func main() {a := cat{name: "小红",feet: 4,}fmt.Println()a.eat("草")// 使用值接收者 和 指针接受者的区别// 通常使用指针实现方法// 值接收者   都可以存(指针变量和值变量)// 指针接收者实现接口 只能存结构体指针类型的变量var a1 animalc2 := &cat{"假老练", 4} fmt.Println(a1)a1 = c2fmt.Println(a1)}type animal interface {speak()eat(string) //带参数的接口
}type cat struct {name stringfeet int8
}
type dog struct {name stringfeet int8
}func (d dog) speak() {fmt.Println("汪汪汪")
}
func (c *cat) speak() {fmt.Println("喵喵喵")
}
func (d dog) eat(food string) {fmt.Printf("%s 吃  %s \n", d.name, food)
}
func (c *cat) eat(food string) {fmt.Printf("%s 吃  %s \n", c.name, food)
}
空接口

所有的类型都实现了空接口
任意类型都可以接收
相当于java object的参数


func show(i interface{}) {fmt.Printf("type:%T value:%v\n", i, i)
}

Go语言:万物皆接口相关推荐

  1. 万物皆可集成系列:低代码对接Web Service接口

    我们知道活字格支持不写代码实现双向API绑定,那么没那么主流的Web Service接口(SOAP协议+XML交互格式)呢?其实对接的思路没有那么复杂,得用C#编码来对接的. 作为一款企业级低代码开发 ...

  2. 万物皆有灵性,爱是世上通用的语言

    万物皆有灵性

  3. Maven Eclipse Junit单元测试解 + 进阶使用Mockito做service层单测(万物皆可mo)+对于异步async方法的单测

    一:简介 JUnit是一个JAVA语言的单元测试框架 主要是后端写完代码可以自己测试一下功能. 二:配置 2.1 引入 在 pom文件里引入依赖包 <dependency><grou ...

  4. 抽象之美——万物皆可设计

    目录 前言 抽象的层次性 软件设计中的分层抽象 容器虚拟化技术,"抽象维纳空" 化繁为简,抽象思维让万物皆可设计 前言 美好的事物大家都喜欢,人是视觉动物,天生都倾向于看得见和摸得 ...

  5. 万物皆可embedding,AI 应用神器 Milvus 登顶数据库顶会 SIGMOD

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 AI 科技评论报道 编辑 | 陈大鑫 想象一下,一位计算神经科学家正 ...

  6. 梅宏院士:软件定义的未来——万物皆可互联,一切均可编程 | CNCC 2017

    作者:杨文 摘要:结合当下的人工智能热潮,梅宏教授认为我们正在进入一个软件定义的时代.软件定义的技术本质是把原先一体化的硬件设施打破,将基础硬件虚拟化并提供标准化的基本功能,然后通过管控软件,控制其基 ...

  7. quicklook不能预览office_万物皆可格!给空格键施加神奇魔法的神器软件—快速预览工具QuicklookPC软件...

    大家好,我是元力.今天给大家带来一款电脑端使用的超级神奇的软件.只需要选中文件,然后点击空格键,即可预览文件. 支持大部分格式,比如word.excel.pdf.图片.视频甚至图片的源文件等等.真正实 ...

  8. AI解救“工具人”:RPA+AI,让万物皆可自动化

    郭一璞 发自 凹非寺 量子位 报道 | 公众号 QbitAI 小A,HR一枚. 作为一个典型基层HR,他每天很大一部分工作,是在处理文档手续: 办入职.离职.休假申请.五险一金,扫描各类文件,在系统里 ...

  9. javascript”面向对象编程”- 1万物皆对象

    javascript几乎成了如今web开发人员必学必会的一门语言,但很多人却只停在了一些表单验证等基础操作层面上,在面向对象语言大行其道的当下,我们需要去学习javascript的面向对象的知识,以便 ...

最新文章

  1. 使用PHP Excel类读取和生成excel文件
  2. 优雅参数判空_java 方法参数怎么优雅校验?
  3. 小工匠聊架构-超高并发秒杀系统设计 04_流量削峰设计
  4. SQL Server中行列转换 Pivot UnPivot (转载)
  5. 李兰娟院士等新冠病毒鸡尾酒疗法研究取得新进展
  6. JeeWx捷微 2.4.1版本发布,开源JAVA微信管家平台(支持公众号、企业号)
  7. VS 查看dll接口
  8. 精通lambda表达式:java多核编程_Java8 Lambda表达式和流操作如何让你的代码变慢5倍...
  9. mysql导出表到新建_用navicat导出mysql的数据库后,再用navicat导入到新建的数据库,报错。...
  10. 目录 1.1. Vue是什么??客户端mvc框架,,功能类似springmvc 1 1.2. Why?为什么使用它?? 1 1.3. 包括哪些组件与内部构成与原理 1 2. Howto 怎么使用 2
  11. Redis 事务 实例
  12. java绘制图形_java怎么绘制简单图形
  13. 开题报告中的研究现状怎么写?
  14. 随机测试数据生成 与 Pandas迭代方法性能对比
  15. please use torch.load with map_location=torch.device(‘cpu‘) to map your storages to the CPU.
  16. android跑马灯效果横向,Android 通过自定义View实现纵向跑马灯效果
  17. Crumb -面包屑状的嵌套按钮
  18. Jini技术常见问题解答
  19. Github与Git安装使用
  20. 风吹雪支付系统易支付去后台验证版本代理系统

热门文章

  1. 他是马云最敬佩的人,白手起家,28岁已经成为世界名人
  2. 【face-api.js】前端实现,人脸捕获、表情识别、年龄性别识别、人脸比对、视频人脸追踪、摄像头人物识别
  3. PDF免费去水印 免费转word工具
  4. 【网络架构搜索NAS】|概述
  5. python中网络编程总结(udp,tcp)
  6. 2021-10-13智库时代
  7. 你必须知道的地理坐标系和投影坐标系
  8. 国家精品在线开放课程“Python语言程序设计”(北理工-嵩天)-第六周组合数据类型 问题总结
  9. chrome恐龙游戏_如何在不离线的情况下玩Chrome的隐藏恐龙游戏
  10. 分享---电脑软件多开方法