Go 1.18 终于来了!

Posted 面向加薪学习

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go 1.18 终于来了!相关的知识,希望对你有一定的参考价值。


Go 1.18 正式版发布了!包含大量新功能的版本,最大的改变带来---泛型、工具链的实现、运行时和库的更改,还改善了性能。

可以点击底部 查看原文,观看视频版泛型教程

该版本保持了Go语言的兼容性承诺:几乎所有 Go 程序都能像以前一样继续编译和运行。下面来看一下新版本的一些重大特性:

泛型

下面是 Go 1.18 泛型的主要功能变化,更详细信息请参阅官方文档。

1. 函数和类型声明的语法,现在接受类型参数。

2. 参数化函数和类型可以通过在方括号中列出类型参数来实例化。

3. 新标记~已添加到操作符和标点符号中。

4. 接口类型的语法现在允许嵌入任意类型(不仅仅是接口的类型名称)以及 union 和 ~T 类型元素。,这样的接口只能用作类型约束。

5. 新的 预声明标识符 any是空接口的别名,可以用来代替 interface.

6. 新的 预声明标识符 comparable是一个接口,表示可以使用==或者 != 比较的所有类型的集合,它只能用作(或嵌入)类型约束。

下面3个包,不在兼容性保证范围内:

1. golang.org/x/exp/constraints:对通用代码有用的约束,例如 constraints.Ordered.

2. golang.org/x/exp/slices:对任何元素类型的切片进行操作的通用函数集合。

3. golang.org/x/exp/maps:对任何键或元素类型的映射进行操作的通用函数集合。


泛型实现具有如下限制:

1. Go 编译器无法处理泛型函数或方法中的类型声明,计划在 Go 1.19 中取消这个限制。

2. Go 编译器不接受具有预声明函数 real、imag 和 complex 的参数类型的参数,计划在 Go 1.19 中取消这个限制。

2. 如果 m 由 P 的约束接口显式声明,Go 编译器仅支持在类型参数类型 P 的值 x 上调用方法 m。类似地,方法值 x.m 和方法表达式 P.m 也仅在 m 由 P 显式声明时才受支持,即使 m 可能在 P 的方法集中,因为 P 中的所有类型都实现了 m,计划在 Go 1.19 中取消这个限制。

3. Go 编译器不支持访问结构字段 x.f,其中 x 是类型参数类型,即使类型参数的类型集中的所有类型都具有字段 f,计划在 Go 1.19 中取消这个限制。

4. 不允许将类型参数或指向类型参数的指针作为结构类型中的未命名字段嵌入,同样地,也不允许在接口类型中嵌入类型参数。

5. 具有多个 term 的 union 元素可能不包含具有非空方法集的接口类型。

泛型代表 Go 生态系统的巨大变化,虽然官方更新了几个支持泛型的核心工具,但还有很多工作要做。剩余的工具、文档和库需要一些时间才能赶上这些语言变化。

模糊测试

1. Go 1.18 包括 fuzzing(模糊测试) 的实现,详情请参阅 fuzzing相关文档。

2. 注意,模糊测试会消耗大量内存,并且可能会影响机器运行时的性能。

3. 另请注意,模糊引擎在运行时会将扩展测试覆盖率的值写入模糊缓存目录 $GOCACHE/fuzz。目前对可以写入模糊缓存的文件数量或总字节数没有限制,因此可能会占用大量存储空间(可能为 GB 级别)。

编译器

1. 现在编译器可以内联包含范围循环或标记为循环的函数。

2. 编译器的类型检查器被完全替换以支持泛型,一些错误消息可能使用与以前不同的措辞(提供更多详细信息,或以更有用的方式表述)。

3. 由于与支持泛型相关的编译器的更改,Go 1.18 的编译速度可能比 Go 1.17 的编译速度慢大约 15%,代码的执行时间不受影响,目前计划在 Go 1.19 中提高编译器的速度。

性能提升

由于 Go1.17 中寄存器 ABI 调用约定扩展到了 RM64 / Apple M1 / PowerPC 64 架构,因此 Go1.18 对这几个架构包含了高达 20% 的 CPU 性能提升。

AMD64

Go 1.18 引入了新的GOAMD64环境变量,它在编译时选择 AMD64 架构的最低目标版本,允许的值为v1、 v2v3v4,默认是v1

RISC-V

Linux 上的 64 位 RISC-V 架构(linux/riscv64 端口)现在支持 c-archive 和 c-shared 构建模式。

Linux

Go 1.18 需要 Linux 内核版本 2.6.32 或更高版本。

Windows

windows/arm 和 windows/arm64 端在支持非合作抢占,有希望解决在调用 Win32 函数时遇到的一些细微的 bug,这些bug在很长一段时间内会阻塞。

ios

在 iOS(ios/arm64 端口)和在基于 AMD64 的 macOS(ios/amd64 端口)上运行的 iOS 模拟器上,Go 1.18 现在需要 iOS 12 或更高版本;已停止支持以前的版本。

FreeBSD

Go 1.18 是支持 FreeBSD 11.x 的最后一个版本,Go 1.19 需要 FreeBSD 12.2+ 或 FreeBSD 13.0+。

可以点击底部 查看原文,观看视频版泛型教程

关注公众号,不迷路!

Go 语言专属T恤来了!Let's Go

一款专属于 Go 语言的长、短袖T恤来了。



此外,连同 Go,一共有二十多款程序员相关题材的极客卫衣和长、短袖T恤。包括:GitHub, Hello World,Chrome 断网,算法,404,Linux,Python,PHP,Java,Swift,Go, C, Android,Vim, Hadoop, 编程狂人,沉默是金,薛定谔的猫,黑客帝国等。  大部分图案均有卫衣、长袖和短袖可供选择。


穿长、短袖T恤还太冷?还有很多款卫衣可以选择。卫衣单件 ¥139.9,长袖 ¥69.9,短袖 ¥59.9


先领券再购物:满99减5元,满159减10元,满259减20元,满359减30元。购买方式,请见末尾


Go 语言专属T恤来了!Let's Go

简约个性

极客之选

Go 语言专属

Go 语言专属T恤来了!Let's Go


GitHub章鱼猫,Chrome断网小恐龙

Hello World,算法首字母粉笔字

Go 语言专属T恤来了!Let's Go


Android机器人,  Swift雨燕

PHP大象, Java红咖啡

Go 语言专属T恤来了!Let's Go


Python之人生苦短, Linux小企鹅

404 Girl || Boyfriend Not Found? , 编程狂人



薛定谔的猫,沉默是金

神秘的V字队,黑客帝国


好评如潮

x******n

质量不错,挑剔的老妈都给予认可,满意5分,祝店家生意兴隆!新年好运!

h******6

老婆说,穿上去很赞,慕名而来,买的

s******y 

给程序员男票买的,他特别喜欢~

j******3

老公还挺满意。

n******6

给技术男买的,有情结,很喜欢,穿着也合适!

l******y (女生)

质感、手感都太棒喏~~~一不小心穿出萌气,大赞

s***s

我的是404 女友的是java 女友很喜欢 对 我就是来虐狗的

曾******鸿

真的非常的好。店家给了一个surprise,非常开心,希望衣服可以穿的久些,好评

d******r

非常喜欢,卫衣里面是绒的,很保暖~~很geek很有范儿

m******t

很合身,穿着非常舒服。面料手感非常好,内侧跟皮肤接触的一面十分柔软。这件hoodie比较厚实,适合比较凉快的地方穿,在办公室空调房里平时觉得冷的地方穿着这件衣服就暖和了

p******头

好看好看,感觉自己越来越geek了

龟******线

非常好!实物和图片的一样!顺着微信公告号过来买的,衣服质量不错。朋友说我穿这件衣服够拽。

寒******1

非常帅,身边的猿们都惊呆了!

让******福

质量很好,比较保暖,代码君值得拥有。

以上均为最新客户真实评论


fanpinshe.taobao.com


淘口令:复制以下红色内容,然后打开手淘即可购买

范品社,使用¥极客T恤¥抢先预览(长按复制整段文案,打开手机淘宝即可进入活动内容)

以上是关于Go 1.18 终于来了!的主要内容,如果未能解决你的问题,请参考以下文章

Go官方 - 1.18 发布说明

Go 如何快速升级安装 Go 1.18

Go 如何快速升级安装 Go 1.18

Go基础系列:接口类型探测和type-switch

Go 1.18 发行说明(翻译)

Go 1.18 发行说明(翻译)