官方在部落格更新了Go泛型(Generics)目前的开发状态,除了持续对泛型设计草案进行修改之外,官方也开发了一个类型检查器,这个程式可以按泛型草案设计,解析使用泛型的Go程式码,并回报相关的类型错误。

泛型是Go社群中不少成员一直要求的功能,在今年4月官方释出的社群大调查,其中有79%的受访者认为,Go的痛点在于缺乏泛型这个关键功能。而Go要不要有泛型这个功能,早在几年前就开始讨论,2018年官方甚至启动草稿设计发想,把泛型作为示範提案,丢出来供大家讨论。

由于官方认为泛型虽然会为Go带来许多灵活性,但同时也会让Go变得複杂许多,因此对于泛型的设计持谨慎的态度,不停地进行调整。官方提到,他们最新发布的设计草案,最大的改变是放弃契约设计,原因是契约和介面类型之间的差异让开发者困惑,因此官方消除了其中的差异,让设计更简单易懂,现在类型参数受介面类型限制,而介面类型包含类型列表,在之前的设计草案,类型列表则是属于契约的功能。

而为了让设计草案更佳完善,官方发布了转换工具,让开发者能以当前泛型设计草案,进行类型检查并且执行程式码,这项工具会将泛型程式码转换成一般Go程式码,官方提到,虽然这个转换程式有其限制,但是希望透过这个工具,让开发者更加认识泛型,另外,官方提到,将来当泛型功能被正式接受之后,其实际的实作将会与现在有所不同。

开发者可以在Playground特别版本试用这个工具,该Playground与一般的Playground相同,只是多支援泛型,另外,开发者也可以自己建置该工具,相关程式码可在Go主要储存库的分支中找到。

透过释出泛型设计草案以及转换工具,官方希望社群能够感受泛型功能,对当前的泛型设计提供看法,官方也一再提醒,儘管社群不少人都认为Go需要泛型,但究竟在哪些方面上,真的需要使用泛型,官方希望可以透过讨论让这个问题更清晰明确。

而之后Go泛型功能的发展,要视社群回馈的状态,官方提到,当设计草案普遍受社群接受,且不需要进行重大更改,那下一步就会进到正式的语言更改提案,最快Go 1.17就会加入泛型,该版本会在2021年8月发布,不过这仅是以最理想的状态推测,一旦过程中需要讨论与修改,那就会需要更久的时间。

版权声明:转载此文是出于传递更多信息之目的。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系,我们将及时更正、删除,谢谢您的支持与理解。