Go 1.20要来了,看看都有哪些变化-第1篇

前言

Go官方团队在2022.12.08发布了Go 1.20 rc1(release candidate)版本,Go 1.20的正式release版本预计会在2023年2月份发布。

让我们先睹为快,看看Go 1.20给我们带来了哪些变化。(文末有彩蛋!)

安装方法:

$ go install golang.org/dl/go1.20rc1@latest
$ go1.20rc1 download

这是Go 1.20版本更新内容详解的第1篇,欢迎大家关注公众号,及时获取本系列最新更新。

Go 1.20发布清单

和Go 1.19相比,改动内容适中,主要涉及语言(Language)、可移植性(Ports)、工具链(Go Tools)、运行时(Runtime)、编译器(Compiler)、汇编器(Assembler)、链接器(Linker)和核心库(Core library)等方面的优化。

我们逐个看看具体都有哪些变化。

语言变化

Go 1.20在语言层面带来了4个变化。

slice转数组

Go1.17在语言层面开始支持将slice转为指向数组的指针。

示例如下:

s := make([]byte, 2, 4)
// 将s这个slice转为指向byte数组的指针s0
// 其中[0]byte里的0表示数组的长度,虽然长度为0,但值不等于nil
s0 := (*[0]byte)(s)      // s0 != nil
fmt.Printf("%T")
// 将s[1:]这个slice转为指向byte数组的指针s1
// s1指向的数组的长度为1
s1 := (*[1]byte)(s[1:])  // &s1[0] == &s[1]
// 将s这个slice转为指向byte数组的指针s2
// s2指向的数组的长度为2 
s2 := (*[2]byte)(s)      // &s2[0] == &s[0]
// 将s这个slice转为指向byte数组的指针s4
// s4指向的数组的长度为4 
s4 := (*[4]byte)(s)      // panics: len([4]byte) > len(s)

注意:slice转为指向数组的指针时,如果数组定义的长度超过了slice的长度,会抛panic。

所以上面s4 := (*[4]byte)(s)这行代码虽然可以编译通过,但是会出现runtime panic。

Go 1.20之前不支持将slice直接转为数组,如果要转,得先转为指向数组的指针,再转为数组,如下面代码所示:

s := make([]byte, 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值