查看原文
其他

“能力越大,责任越大” - Go语言之父详解将于Go 1.18发布的Go泛型

白明的赞赏账户 TonyBai 2022-05-13
前言
GopherCon2020上,Go语言之父发表演讲“Typing [Generic] Go”。介绍了Go泛型的最新变化、type parameter是如何满足Go现有类型系统的以及泛型代码的类型检查。本文回顾了整个go泛型的演化历史,整理了此次演讲重点内容并加上笔者的理解,分享给大家,希望能为大家理解Go泛型带来帮助。

Go语言之父

在2020.11.9~11.13举行的全球最具影响力的Go语言技术大会GopherCon 2020上,Go语言之父之一的Robert Griesemer为全世界Gopher们带来了本次大会最重量级的演讲“Typing [Generic] Go”

图:Robert Griesemer带来的有关Go泛型演讲

在这个演讲中,Robert Griesemer向Gopher们介绍了自从今年中旬在Go官网发表文章“The Next Step for Generics”以来Go泛型(Go Generics)技术草案的最新变化,并详细介绍了类型参数(type parameter)是如何满足Go现有的类型系统的,以及Go编译器是如何对Go泛型代码进行类型检查的。

本文整理了此次演讲的重点内容,供广大Gopher参考,希望能为大家理解Go泛型带来帮助。

一. 预备知识

为了更好地理解Robert Griesemer的讲解,这里先带着大家回顾一下Go generics技术草案演化史。

图:Go泛型技术草案演化时间线

•2017年7月,Go核心团队领军人物Russ Cox在Gophercon 2017大会上发表演讲“Toward Go 2”,正式吹响Go向下一个阶段演化的号角;•2018年8月,在Gophercon 2018大会结束后不久,Go核心团队发布了Go2 draft proposal,这里面涵盖了由Ian Lance Taylor和Robert Griesemer操刀主写的Go泛型的第一版draft proposal。这版草案引入了contract关键字来定义泛型类型参数(type parameter)的约束、类型参数放在普通函数参数列表前面的小括号中,并用type关键字声明:

// 第一版泛型技术草案中的典型泛型语法contract stringer(x T) { var s string = x.String()}func Stringify(type T stringer)(s []T) (ret []string) {}

微信扫一扫付费阅读本文

可试读10%

微信扫一扫付费阅读本文

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存