Golang的interface实践
2017-02-17 19:28
447 查看
这是第二个我在别的语言里面没有见过的实现,go的interface可以说是独树一帜,让我们仔细来实践一下。
interface类型是什么?interface类型定义了一组方法,如果某个对象实现了某个接口的所有方法,则此对象就实现了此接口。
还是先来看一个例子:
直接看到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编程-谢孟军
interface类型是什么?interface类型定义了一组方法,如果某个对象实现了某个接口的所有方法,则此对象就实现了此接口。
还是先来看一个例子:
package main import "fmt" type Human struct { name string age int phone string } type Student struct { Human school string loan float32 } type Employee struct { Human company string money 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 Men e := Employee{Human{name: "piperck", age: 25, phone: "182020912309"}, "xcf", 1} tt = e fmt.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开发实践:把数据库数据保存到map[string]interface{}中
- [Golang]通过interface实现"泛型"的用例
- golang rabbitmq实践 (一 rabbitmq配置)
- golang的interface到其他类型的数据转换
- golang中 boltdb的学习和实践
- golang实践-随机数的那点事儿
- Golang 在阿里集团调度&集群管理系统 Sigma 中的实践
- 【GoLang笔记】浅析Go语言Interface类型的语法行为及用法
- golang技术随笔(一)深入理解interface
- Golang在视频直播平台的高性能实践
- golang 接口interface{}、断言、switch type
- SCA概念与应用实践(7.SCA装配模型--7.3 接口 interface)
- [Golang]设计模式实践:组合(Composite)
- golang之interface(接口)与 reflect 机制
- Golang在视频直播平台的高性能实践(含PPT下载)
- golang中interface接口的深度解析
- Golang中的interface
- Golang在视频直播平台的高性能实践(含PPT下载)
- Golang-interface(一 基本使用)
- golang rabbitmq实践 (二 实现简单的消息收发)