Go语言学习05-面向对象编程
Go语言学习05-面向对象编程
Go语言官方对于Go 语言是否为面向对象编程的描述https://golang.org/doc/faq:
Is Go an object-oriented language?Yes and no. Although Go has types and methods and allows an object-oriented style of programming, there is no type hierarchy. The concept of “interface” in Go provides a different approach that we believe is wasy to use and in some ways more general.
Also, the lack of a type hierarchy makes “objects” in Go fell much more lightweight than in language such as C++ or Java.
封装数据和行为
结构体定义
1 | type Employee struct { |
实例创建及初始化
1 | e := Employee{"0", "Bob", 20} |
行为 (方法) 定义
1 | // 第一种定义方式在实例对应方法被调用时, 实例的成员会进行值复制 |
接口与依赖
1 | classDiagram |
1 | // Programmer.java |
Duck Type式接口实现
接口定义
1 | type Programmer interface { |
接口实现
1 | type GoProgrammer struct { |
Go 接口
与其他主要编程语言的差异- 接口为非入侵性, 实现不依赖于接口定义
- 所以接口的定义可以包含在接口使用者包内
接口变量
自定义类型
type IntConvertionFn func(n int) int
type Mypoint int
多态
空接口与断言
空接口可以表示任何类型
通过断言来将空接口转换为指定类型
1
v, ok := p.(int) //ok = true 时为转换成功
Go 接口最佳实践
倾向于使用小的接口定义, 很多接口只包含一个方法
1
2
3
4
5
6
7type Reader interface {
Read(p []byte) (n int, err int)
}
type Writer interface {
Write(p []byte) (n int, err int)
}较大的接口定义, 可以由多个小接口定义组合而成
1
2
3
4type ReadWriter interface {
Reader
Writer
}只依赖于必要功能的最小接口
1
2
3func StoreData(reader Reader) error {
...
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 技术匝记簿!
评论