这是第二个我在别的语言里面没有见过的实现,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实践相关推荐

  1. Ubuntu14.04+RabbitMQ3.6.3+Golang的最佳实践

    博文作者:迦壹 博客地址:Ubuntu14.04+RabbitMQ3.6.3+Golang的最佳实践 转载声明:可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明,谢谢合作! 1.Ra ...

  2. java实现鸭子类型,Golang的interface及duck typing鸭子类型

    Golang的interface及duck typing鸭子类型 "当看到一只鸟走起来像鸭子.游泳起来像鸭子.叫起来也像鸭子,那么这只鸟就可以被称为鸭子." 意思就是: 一个东西究 ...

  3. golang 大数据平台_人工智能大数据平台中Golang的应用实践

    原标题:人工智能大数据平台中Golang的应用实践 分享人: 薛磊,Momenta资深研发工程师,前Sun中国工程研究院工程师,专注于分布式系统.存储系统.容器等技术,目前从事深度学习训练平台的基础架 ...

  4. golang语言 []interface{}和interface{}

    文章目录 golang语言 []interface{} interface(接口) interface应用场景 interface{} 空接口 []interface{} golang中为什么[]st ...

  5. GoLang之interface底层系列二(类型断言)

    文章目录 GoLang之interface底层系列二(类型断言) 1.抽象类型.具体类型 2.断言的作用类型与目标类型 3.空接口.(具体类型) 4.非空接口.(具体类型) 5.空接口.(非空接口) ...

  6. Golang后台单元测试实践

    文章目录 Why单元测试 单元测试的时机 编码前:TDD 编码后:存量 与编码同步进行:增量 Golang单测框架选型 & 示例 golang原生testing框架 特点 示例 扩展:Tabl ...

  7. golang tcp keepalive实践

    前文中已经介绍了TCP keep alive的做了详尽说明,本文结合golang,介绍如何使用TCP keep alive. 目前golang net包不提供TCP keep alive 空闲多长时间 ...

  8. [Golang] 用interface{}实现泛型出现的问题

    说明 在做一些实现的时候,碰到了一个棘手的问题,问题是这样的,向一个函数里传入slice和begin,end,返回slice[begin:end].很明显这是一个实现泛型的问题,但是在做具体实现的时候 ...

  9. golang 接口_「Golang系列」 深入理解Golang Empty Interface (空接口)

    空接口可用于保存任何数据,它可以是一个有用的参数,因为它可以使用任何类型. 要理解空接口如何工作以及如何保存任何类型,我们首先应该理解名称背后的概念. 接口 这是Jordan Oreilli对空接口的 ...

最新文章

  1. 妙用终截者密码锁防***注入Explorer
  2. 【bzoj2850】巧克力王国 KD-tree
  3. 云中计算将软件服务外包带入3.0时代
  4. 2016微软开发者峰会在京举办 纳德拉要来做演讲
  5. java oca_OCA第5部分中的Java难题
  6. XUtils之注解机制详解
  7. Qt工作笔记-QCustomPlot的基本使用
  8. 蓝桥杯 基础练习 矩形面积交
  9. mysql8.0 创建用户并授权
  10. Tricks (四十一)—— 一 list 两用
  11. 一个声明被new多次
  12. 企业为开源做贡献,贡献大了说话就有人听了
  13. 宝塔无法访问页面解决方法
  14. 计算机网络c类网络划分子网介绍,IP地址的子网划分详解
  15. mysql upsert语法_Mysql - Upsert功能实现
  16. C#语言实例源码系列-实现无损压缩图片
  17. 我爬了链家青岛市北3000套二手房得出一个结论
  18. 微信小程序将时间戳转为日期格式
  19. 如何将影像变换为北京54坐标系
  20. A Neural Conversational Model

热门文章

  1. 产业|嵌入式传感器将是未来机器人等技术增长的核心
  2. 10家最具创新性的机器学习公司
  3. 学历对程序员重要么?
  4. 一个后台开发工程师的“窦娥冤”!
  5. “我在苹果商店下载了一个诈骗 App,损失 60 万美金!”
  6. 在内存只有 24KB 的电脑上写操作系统,是怎样的体验?
  7. 去伪存真,更多区块链落地应用即将涌现
  8. 不会真有人国庆都不打王者吧?
  9. 如何和相亲对象无限聊天?程序员甩了这份架构图……| 每日趣闻
  10. 2018 F40中国青年投资人