首页 > 代码库 > [Go语言]从Docker源码学习Go——Interfaces
[Go语言]从Docker源码学习Go——Interfaces
Interface定义:
type Namer interface { Method1(param_list) return_type Method2(param_list) return_type ...}
注:
1. interface中不能包含变量
2. 一个类型不用显式去定义实现某个接口,只要包含所有interface中定义的方法,这个类型就默认实现了这个接口
3. 多个类型可以实现相同的接口
4. 一个类型实现接口的同时,还可以定义属于自己的方法
5. 一个类型可以实现多个接口
嵌套的interface
type ReadWrite interface { Read(b Buffer) bool Write(b Buffer) bool}type Lock interface { Lock() Unlock()}type File interface { ReadWrite Lock Close()}
这样File会包含ReadWrite和Lock中所有的方法
判断interface类型
v := varI.(T)//varI must be an interface variable.
实例
package lemontype Shaper interface { Area() float32}type Square struct { Side float32}func (sq *Square) Area() float32 { return sq.Side * sq.Side}//use in main func.func showInterfaceUsage() { sq1 := new(lemon.Square) sq1.Side = 5 var areaIntf lemon.Shaper areaIntf = sq1 if v, ok := areaIntf.(*lemon.Square); ok { fmt.Printf("The square has area: %f\n", v.Area()) }}
注意:方法的定义中传的type为指针,判断时也要传指针。
switch areaIntf.(type) { case *lemon.Square: fmt.Printf("The square area is %f\n", areaIntf.Area()) default: fmt.Printf("The default type") }
也可以直接通过方法interface.(type)来获得接口的类型
判断类型是否实现了接口
...待续
[Go语言]从Docker源码学习Go——Interfaces
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。