经历九九八十一难, 多年的不断探讨和 Go 语言爱好者们在社区中的强烈关注, 且 Go 官方在 2020 年不断放出消息.
本文转载自微信公众号「脑子进煎鱼了」, 作者陈煎鱼. 转载本文请联系脑子进煎鱼了公众号.
大家好, 我是煎鱼.
经历九九八十一难, 多年的不断探讨和 Go 语言爱好者们在社区中的强烈关注, 且 Go 官方在 2020 年不断放出消息.
总算在 2021 年 1 月 12 日, 官方正式提出将泛型特性加入 Go 语言的 proposal 了, 且最新的草案设计已经更新.
基本语法如下:
- func Print[T any](s []T) {
- // same as above
- }
其大体的概述如下:
函数可以具有使用方括号的其他类型参数列表, 但其他情况下看起来像普通的参数列表: func F[T any](p T) { ... }.
类型也可以具有类型参数列表: type MySlice[T any] []T.
每个类型参数都有一个类型约束, 就像每个普通参数都有一个类型: func F[T Constraint](p T) { ... }.
类型约束是接口类型.
新的预声明名称 any 是允许任何类型的类型约束.
用作类型约束的接口类型可以具有预先声明的类型的列表. 只有与那些类型之一匹配的类型参数才能满足约束条件.
泛型函数只能使用其类型约束所允许的操作.
使用泛型函数或类型需要传递类型实参.
在通常情况下, 类型推断允许省略函数调用的类型参数.
根据官方博客的消息, 如果该提案被正式接受. 那么将会在 2021 年底之前完成一个基本可用的泛型功能 (可能未完全优化), 又或是会作为 Go1.18beta 的一部分.
这是 Go 泛型特性的又一步历史性前进, 这一个里程碑. 若大家有兴趣进一步了解或想提出意见, 可查看下述传送门:
- [A Proposal for Adding Generics to Go]:https://blog.golang.org/generics-proposal.
- [proposal: spec: add generic programming using type parameters]:https://github.com/golang/go/issues/43651.
不知道今年年底或 Go1.18beta 能不能真的看到泛型的正式完整可用版本呢, 值得期待!
来源: http://developer.51cto.com/art/202101/640784.htm