Go 1.20要来了,看看都有哪些变化-第4篇
Contents
前言
Go官方团队在2022.12.08发布了Go 1.20 rc1(release candidate)版本,Go 1.20的正式release版本预计会在2023年2月份发布。
让我们先睹为快,看看Go 1.20给我们带来了哪些变化。
安装方法:
|
|
这是Go 1.20版本更新内容详解的第4篇,欢迎大家关注公众号,及时获取本系列最新更新。
Go 1.20发布清单
和Go 1.19相比,改动内容适中,主要涉及语言(Language)、可移植性(Ports)、工具链(Go Tools)、运行时(Runtime)、编译器(Compiler)、汇编器(Assembler)、链接器(Linker)和核心库(Core library)等方面的优化。
第1篇主要涉及Go 1.20在语言、可移植性方面的优化,原文链接:Go 1.20版本升级内容第1篇。
第2篇主要涉及Go命令和工具链方面的优化,原文链接:Go 1.20版本升级内容第2篇。
第3篇主要涉及Go在运行时、编译器、汇编器、链接器等方面的优化,原文链接:Go 1.20版本升级内容第3篇。
本文重点介绍Go 1.20在核心库方面的优化。
crypto/ecdh
Go 1.20新增了 crypto/ecdh 这个package,ecdh实现了Elliptic Curve Diffie-Hellman这个新的加密算法。
封装多个error
Go 1.20允许一个error变量里封装多个error。
|
|
这段程序的输出结果为:
|
|
详情可以参考:https://pkg.go.dev/errors@master#pkg-overview
fmt.Errorf里带有%w参数,就会返回一个实现了Unwrap方法的error类型的变量。
HTTP ResponseController
net/http这个package新增了名为ResponseController的新类型。
|
|
A ResponseController is used by an HTTP handler to control the response.
A ResponseController may not be used after the Handler.ServeHTTP method has returned.
详情可以参考:https://pkg.go.dev/net/http@master#ResponseController。
Rewrite钩子函数
httputil.ReverseProxy 类型新增了一个 Rewrite 方法,这是一个钩子函数,用来取代之前的Director钩子函数。
|
|
详情可以参考:https://pkg.go.dev/net/http/httputil@master#ReverseProxy.Rewrite。
标准库的修改
-
新增了
CutPrefix和CutSuffix函数,这2个函数功能上类似TrimPrefix和TrimSuffix,但是还会返回一个bool类型的变量,表示这个string是否被修改了。新增了
Clone函数,会创建一个byte slice的拷贝。 -
ReadVarint和ReadUvarint函数如果读的数据的值被损坏,比如只写了一部分内容,会返回io.ErrUnexpectedEOF,而不是像之前返回io.EOF。 -
新的
Join函数可以把多个error变量的值组合在一起,封装为一个新的error变量。 -
Errorf支持%w格式化字符串,可以返回一个实现了Unwrap方法的error类型变量。 -
新增了
CutPrefix和CutSuffix函数,这2个函数功能上类似TrimPrefix和TrimSuffix,但是还会返回一个bool类型的变量,表示这个string是否被修改了。新增了
Clone函数,会创建一个string的拷贝。 -
Map类型新增了3个新方法:Swap,CompareAndSwap和CompareAndDelete,允许对已有的map做原子更新。 -
新增了
B.Elapsed方法,可以返回当前的benchmark性能测试耗时了多久。 -
新增了3个常量
DateTime,DateOnly和TimeOnly,方便开发者做格式转换,不用在代码里写死"2006-01-02 15:04:05"。
总结
Go 1.20版本即将在2023年2月份发布。
总体而言,Go 1.20版本没有大的修改,主要在细节方面做了各种优化。
推荐阅读
开源地址
文章和示例代码开源在GitHub: Go语言初级、中级和高级教程。
公众号:coding进阶。关注公众号可以获取最新Go面试题和技术栈。
个人网站:Jincheng’s Blog。
知乎:无忌。
福利
我为大家整理了一份后端开发学习资料礼包,包含编程语言入门到进阶知识(Go、C++、Python)、后端开发技术栈、面试题等。
关注公众号「coding进阶」,发送消息 backend 领取资料礼包,这份资料会不定期更新,加入我觉得有价值的资料。还可以发送消息「进群」,和同行一起交流学习,答疑解惑。
References
