快報:正式提案將泛型特性加入 Go 語言
本文轉(zhuǎn)載自微信公眾號「腦子進煎魚了」,作者陳煎魚。轉(zhuǎn)載本文請聯(lián)系腦子進煎魚了公眾號。
大家好,我是煎魚。
經(jīng)歷九九八十一難,多年的不斷探討和 Go 語言愛好者們在社區(qū)中的強烈關(guān)注,且 Go 官方在 2020 年不斷放出消息。
總算在 2021 年 1 月 12 日,官方正式提出將泛型特性加入 Go 語言的 proposal 了,且最新的草案設(shè)計已經(jīng)更新。
基本語法如下:
- func Print[T any](s []T) {
- // same as above
- }
其大體的概述如下:
- 函數(shù)可以具有使用方括號的其他類型參數(shù)列表,但其他情況下看起來像普通的參數(shù)列表:func F[T any](p T) { ... }。
- 類型也可以具有類型參數(shù)列表:type MySlice[T any] []T。
- 每個類型參數(shù)都有一個類型約束,就像每個普通參數(shù)都有一個類型:func F[T Constraint](p T) { ... }。
- 類型約束是接口類型。
- 新的預(yù)聲明名稱 any 是允許任何類型的類型約束。
- 用作類型約束的接口類型可以具有預(yù)先聲明的類型的列表。只有與那些類型之一匹配的類型參數(shù)才能滿足約束條件。
- 泛型函數(shù)只能使用其類型約束所允許的操作。
- 使用泛型函數(shù)或類型需要傳遞類型實參。
- 在通常情況下,類型推斷允許省略函數(shù)調(diào)用的類型參數(shù)。
根據(jù)官方博客的消息,如果該提案被正式接受。那么將會在 2021 年底之前完成一個基本可用的泛型功能(可能未完全優(yōu)化),又或是會作為 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 能不能真的看到泛型的正式完整可用版本呢,值得期待!