背景
知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。
知识分享系列目前包含Java、Golang、Linux、Docker等等。
开发环境
- 系统:windows10
- 语言:Golang
- golang版本:1.18
内容
3月15号经历了七个月,Go1.18版本发布了,这个版本是一个重要的阶段版本,我们最关注的泛型正式发布,同样的这个版本依旧向下兼容,因此我们可以在现有的版本上直接进行安装使用新版本。
以下是本次版本最明显的变化列表,参见官方发布说明
- 函数和类型声明的语法现在接受类型参数。
- 参数化的函数和类型可以通过在它们后面加上方括号中的类型参数列表来实例化。
- 新的标记~被添加到操作符和标点符号集合中。
- 接口类型的语法现在允许嵌入任意类型(不仅仅是接口的类型名)以及联合和~T类型元素。这样的接口只能用作类型约束。接口现在定义了一组类型和一组方法。
- 新的预先声明的标识符any是空接口的别名。它可以用来代替接口{}。
- 新的预先声明的标识符comparable是一个接口,它表示可以使用==或!=进行比较的所有类型的集合。它只能作为(或嵌入)类型约束使用。
泛型的一些限制可以查看以下机翻:
当前的泛型实现具有以下已知限制:
- Go 编译器无法处理泛型函数或方法中的类型声明。我们希望在 Go 1.19 中提供对此功能的支持。
- realGo 编译器不接受带有预先声明的函数、imag和 的参数类型的参数complex。我们希望在 Go 1.19 中取消这个限制。
- 如果由的约束接口显式声明,Go 编译器仅支持对类型参数类型m的值 调用方法。类似地,方法值和方法表达式 也仅在由 显式声明时才受支持,即使由于所有类型都在implement 中可能位于方法集中。我们希望在 Go 1.19 中取消这个限制。 xPmPx.mP.mmPmPPm
- Go 编译器不支持访问类型参数 type 的结构字段x.f ,x即使类型参数的类型集中的所有类型都有一个 field f。我们可能会在 Go 1.19 中删除此限制。
- 不允许将类型参数或指向类型参数的指针作为未命名字段嵌入到结构类型中。同样,不允许在接口类型中嵌入类型参数。目前还不清楚这些是否会被允许。
- 具有多个术语的联合元素可能不包含具有非空方法集的接口类型。目前还不清楚这是否会被允许。
- 泛型也代表了 Go 生态系统的巨大变化。虽然我们更新了几个支持泛型的核心工具,但还有很多工作要做。剩余的工具、文档和库需要时间才能赶上这些语言变化。
以上是其官方机翻后的主要更新内容,下一节我们将进行编写一些案例进行使用泛型,并分析哪些场景下我们需要用到这一个特性。
本文声明:
知识共享许可协议
本作品由 cn華少 采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。