Golang的interface实践
这是第二个我在别的语言里面没有见过的实现,go的interface可以说是独树一帜,让我们仔细来实践一下。
interface类型是什么?interface类型定义了一组方法,如果某个对象实现了某个接口的所有方法,则此对象就实现了此接口。
还是先来看一个例子:
package mainimport "fmt"type Human struct {name stringage intphone string }type Student struct {Humanschool stringloan float32 }type Employee struct {Humancompany stringmoney float32 }//Human 对象实现Sayhi方法 func (h Human) SayHi() {fmt.Printf("Hi, I am %s you can call me on %s\n", h.name, h.phone) }//Human 对象实现Sing方法 func (h Human) Sing(lyrics string) {fmt.Println("La la, la la la, la la la ...", lyrics) }func (h Human) Guzzle(beerStein string) {fmt.Println("Guzzle Guzzle Guzzle...", beerStein) }func (e Employee) SayHi() {fmt.Printf("Hi, I am %s, I work at %s. Call me on %s\n", e.name, e.company, e.phone) }type Men interface {SayHi()Sing(lyrics string)Guzzle(beerStein string) }func main() {var tt Mene := Employee{Human{name: "piperck", age: 25, phone: "182020912309"}, "xcf", 1}tt = efmt.Println(tt) }
直接看到main函数的地方,我们申明一个Men接口变量tt,然后可以看到,由于Employee通过继承实现了Men接口里面定义的三个函数,所以他可以被赋值给Men类型的任何变量之中。
另外还有一种特别的interface,空interface,空interface(interface{})不包含任何的mehod里面,正因为如此所有类型都实现了空的interface接口。空interface可以存储任意类型的数值。
总结一下就是,只要你实现了这个interface里面定义的方法,那么你就实现了这个interface。申明的这个interface变量就可以存储你的变量类型。 打个比方就是,fmt.Println函数接收一个指定的interface当参数,如果你实现了这个指定interface的所有方法,你就可以将这个实现了interface的东西传给fmt.Println!
Reference:
Go Web编程-谢孟军
Golang的interface实践相关推荐
- Ubuntu14.04+RabbitMQ3.6.3+Golang的最佳实践
博文作者:迦壹 博客地址:Ubuntu14.04+RabbitMQ3.6.3+Golang的最佳实践 转载声明:可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明,谢谢合作! 1.Ra ...
- java实现鸭子类型,Golang的interface及duck typing鸭子类型
Golang的interface及duck typing鸭子类型 "当看到一只鸟走起来像鸭子.游泳起来像鸭子.叫起来也像鸭子,那么这只鸟就可以被称为鸭子." 意思就是: 一个东西究 ...
- golang 大数据平台_人工智能大数据平台中Golang的应用实践
原标题:人工智能大数据平台中Golang的应用实践 分享人: 薛磊,Momenta资深研发工程师,前Sun中国工程研究院工程师,专注于分布式系统.存储系统.容器等技术,目前从事深度学习训练平台的基础架 ...
- golang语言 []interface{}和interface{}
文章目录 golang语言 []interface{} interface(接口) interface应用场景 interface{} 空接口 []interface{} golang中为什么[]st ...
- GoLang之interface底层系列二(类型断言)
文章目录 GoLang之interface底层系列二(类型断言) 1.抽象类型.具体类型 2.断言的作用类型与目标类型 3.空接口.(具体类型) 4.非空接口.(具体类型) 5.空接口.(非空接口) ...
- Golang后台单元测试实践
文章目录 Why单元测试 单元测试的时机 编码前:TDD 编码后:存量 与编码同步进行:增量 Golang单测框架选型 & 示例 golang原生testing框架 特点 示例 扩展:Tabl ...
- golang tcp keepalive实践
前文中已经介绍了TCP keep alive的做了详尽说明,本文结合golang,介绍如何使用TCP keep alive. 目前golang net包不提供TCP keep alive 空闲多长时间 ...
- [Golang] 用interface{}实现泛型出现的问题
说明 在做一些实现的时候,碰到了一个棘手的问题,问题是这样的,向一个函数里传入slice和begin,end,返回slice[begin:end].很明显这是一个实现泛型的问题,但是在做具体实现的时候 ...
- golang 接口_「Golang系列」 深入理解Golang Empty Interface (空接口)
空接口可用于保存任何数据,它可以是一个有用的参数,因为它可以使用任何类型. 要理解空接口如何工作以及如何保存任何类型,我们首先应该理解名称背后的概念. 接口 这是Jordan Oreilli对空接口的 ...
最新文章
- 妙用终截者密码锁防***注入Explorer
- 【bzoj2850】巧克力王国 KD-tree
- 云中计算将软件服务外包带入3.0时代
- 2016微软开发者峰会在京举办 纳德拉要来做演讲
- java oca_OCA第5部分中的Java难题
- XUtils之注解机制详解
- Qt工作笔记-QCustomPlot的基本使用
- 蓝桥杯 基础练习 矩形面积交
- mysql8.0 创建用户并授权
- Tricks (四十一)—— 一 list 两用
- 一个声明被new多次
- 企业为开源做贡献,贡献大了说话就有人听了
- 宝塔无法访问页面解决方法
- 计算机网络c类网络划分子网介绍,IP地址的子网划分详解
- mysql upsert语法_Mysql - Upsert功能实现
- C#语言实例源码系列-实现无损压缩图片
- 我爬了链家青岛市北3000套二手房得出一个结论
- 微信小程序将时间戳转为日期格式
- 如何将影像变换为北京54坐标系
- A Neural Conversational Model