Go语言:从基础特性到效率优化
1. Go语言的基础特性
1.1 结构体方法、字段和接口
结构体方法、字段和接口是编写过程式可组合代码和面向对象代码的优秀且简单的方式。在软件开发中,它们能满足底层和高层编程的需求。虽然Go语言并不支持所有的继承特性(如类型到类型的转换),但它提供的功能足以满足几乎所有的面向对象编程场景。
1.2 泛型
自Go 1.18版本起,Go语言开始支持泛型,这是社区期待已久的特性。泛型,也称为参数多态性,允许我们实现类型安全的功能,以便在不同类型之间复用。
然而,Go语言中引入泛型引发了一些讨论,主要有两个问题:
- 两种实现方式 :从一开始,Go语言就通过接口支持类型安全的可复用代码。例如, sort.Sort
可以被所有实现了 sort.Interface
的类型复用。添加泛型意味着在很多情况下,我们有了两种实现相同功能的方式。不过,接口有时会给代码使用者带来麻烦,并且由于一些运行时开销,可能会导致性能变慢。
- 开销问题 :实现泛型可能会给语言带来一些负面影响,具体取决于实现方式,可能会影响不同方面,如下表所示:
| 实现方式 | 影响 |
| — | — |
| 跳过实现(如C语言) | 降低程序员的开发速度 |
| 单态化(Monomorphization) | 影响编译时间和二进制文件大小 |
| 装箱(Boxing,如Java) | 影响执行时间或内存使用 |
经过多次提案