本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"!
作者:tonybai|慕课网讲师
正在如火如荼地开发当中,按照Go核心团队的一年两次的发布节奏来算,Go 1.21版本预计将在2023年8月发布(G0 1.20版本是在2023年2月份发布的)。
本文将和大家一起看看Go 1.21都会带来哪些新特性。不过由于目前为时尚早,下面列出的有些变化最终不一定能进入到Go 1.21的最终版本中,所以切记一切变更要以最终Go 1.21版本发布时为准。
在细数变化之前,我们先来看看Go语言的当前状态。
1. Go语言当前状态
Go语言的2022年终排名为12位,同时TIOBE官方编辑也提到:“在新兴编程语言中,Go是唯一一个可能在未来冲入前十的后端编程语言”。Go语言的发展似乎应验了这一预测,在今年的3月份,Go就再次进入编程语言排行榜前十:
一个月后的四月初,TIOBE排行榜上,Go稳住了第10名的位次:
在国内,在鹅厂前不久发布的《2022年腾讯研发大数据报告》中,
在国内,继Go在2021年从C++手中躲过红旗首次登顶鹅厂最热门编程语言之后,在鹅厂前不久发布的《2022年腾讯研发大数据报告》中,[Go蝉联鹅厂最热门编程语言],继续夯实在国内头部互联网公司内的优势地位:
Go于2009年开源,在经历多年的宣传和鼓吹后,Go目前进入了平稳发展的阶段。疫情结束后,原先线上举办或取消的国内外的Go技术大会现在陆续又都开始恢复了,相信这会让更多开发人员接触到Go。像Go这样的能在世界各地持续多年举办技术大会的语言真是不多了。
接下来,我们就来聚焦到Go 1.21版本,挖掘一下这个版本都有哪些新特性。
2. 语言变化
目前Go 1.21版本里程碑中涉及语言变化的有大约2项,我们来看看。
2.1 增加clear预定义函数
Go 1.21增加了一个clear预定义函数用来做切片和map的clear操作,其原型如下:
// $GOROOT/src/builtin.go
// The clear built-in function clears maps and slices.
// For maps, clear deletes all entries, resulting in an empty map.
// For slices, clear sets all elements up to the length of the slice
// to the zero value of the respective element type. If the argument
// type is a type parameter, the type parameter's type set must
// contain only map or slice types, and clear performs the operation
// implied by the type argument.
func clear[T ~[]Type | ~map[Type]Type1](t T)
clear是针对map和slice的操作函数,它的语义是什么呢?我们通过一个例子来看一下:
package main
import "fmt"
func main() {
var sl = []int{1, 2, 3, 4, 5, 6}
fmt.Printf("before clear, sl=%v, len(sl)=%d, cap(sl)=%d\n", sl, len(sl), cap(sl))
clear(sl)
fmt.Printf("after clear, sl=%v, len(sl)=%d, cap(sl)=