【Go学习笔记】12、接口 interface
HundredLee
· · 2248 次点击 ·
·
开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
接口interface
- 接口是一个或多个方法签名的集合
- 只要某个类型拥有该接口的所有方法签名,即算实现该接口,无需显示声明实现了哪个接口,这称为Structural Typing
- 接口只要方法声明,没有实现,没有数据字段
- 接口可以匿名嵌入其他接口,或嵌入到结构中
- 将对象赋值给接口时,会发生拷贝,而接口内部存储的是指向这个复制品的指针,既无法修改复制品的状态,也无法获取指针
- 只有当接口存储的类型和对象都为nil时,接口才等于nil
- 接口调用不会做receiver的自动转换
- 接口同样支持匿名字段方法
- 接口也可以实现类似OOP中的多态
- 空接口可以作为任何类型数据的容器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| type USB interface { Name() string Connector } type Connector interface { Connect() } type PhoneConnector struct { name string } func (pc PhoneConnector) Name() string { return pc.name } func (pc PhoneConnector) Connect() { fmt.Println("connect: ",pc.name) } func main (){ a := PhoneConnector{"PhoneConnector"} a.Connect() Disconnect(a) a := PhoneConnector{"PhoneConnector"} var p Connector p = Connector(a) p.Connect() } func Disconnect(usb USB) { if pc,ok := usb.(PhoneConnector) ; ok { fmt.Println(pc.name) return } fmt.Println("Unknown device") }
|
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889