首页
Preview

快速指南:Go 1.20 新特性

Go 1.19发布已经将近6个月了,社区已经发布了Go 1.20的rc3版本。如果你想知道早期版本有哪些功能,可以查看快速指南:Go 1.19功能

Go 1.20将于2023年2月发布。你可以查看发布状态。现在让我们看看Go 1.20有哪些新功能。

目录

多个错误的包装

使用这个功能,我们可以将多个错误快速包装成一个错误。

func Join(errs ...error) error

fmt.Errorferrors 包的函数现在支持多个错误。下面是这些函数的一个示例用法。

这段代码将返回“one for all, all for one”和“err2”。

跳过模式

Go CLI具有一种新功能,可以使用模式来跳过。下面是一个简单的使用示例。

你可以跳过集成测试。

这个跳过模式也可以用于基准测试和代码生成。

 go test -bench=. -v -skip=<pattern>
 
 go generate -skip=<pattern>

带取消的上下文

在Go 1.20版本之后,我们可以通过原因来取消上下文。

func WithCancelCause(parent Context) (ctx Context, cancel CancelCauseFunc)
//
ctx, cancel := context.WithCancelCause(parent)
cancel(myError)
ctx.Err() // returns context.Canceled
context.Cause(ctx) // returns myError

不安全包

你可能不知道,unsafe包提供了底层编程的功能,包括违反类型系统的操作*。即使这个包的名称是为了保持距离,但它在优化底层性能方面变得越来越重要。

该包的能力已经扩展到了SliceDataStringStringData函数。这些函数可以构造和解构切片和字符串值,而不依赖于它们的确切表示。

可比较接口

可比较类型通过comparable接口进行定义,该接口可用于约束类型参数函数。例如,你可以为所有可比较类型编写相等函数。

理解哪些类型是可比较的有点棘手。在Go文档中描述如下:

  • 布尔、数值、字符串、指针和通道类型是严格可比的。
  • 如果所有字段类型都是严格可比的,则结构类型是严格可比的。
  • 如果它们的数组元素类型是严格可比的,则数组类型是严格可比的。
  • 如果它们类型集中的所有类型都是严格可比的,则类型参数是严格可比的。

基于性能剖析的优化

Go 1.20为可执行代码块提供了一种新的基于性能剖析的优化。默认情况下,如果内联的成本大于80,就不会内联。使用PGO,Go更积极地调用内联函数。这种内联优化可以将基准测试的性能提高约3-4%。这个功能是预览版,将在未来的版本中得到改进。

不包含内存区域

谷歌声称,他们通过这个功能将CPU使用率降低了多达15%。即使这个提案在Go 1.20计划中有一段时间。**它已经从发布计划中删除。**如果你仍然对它感兴趣,可以查看这篇文章

其他变化

  • go命令现在默认禁用cgo。这使得Go在某些最小的容器环境和macOS上的工作更加顺畅,因为自Go 1.16以来,基于cgo的软件包没有使用预分发的包归档。
  • 垃圾收集器的优化可提高CPU性能达到2%。
  • 从此版本开始,Go具有内置的集成测试覆盖率功能。
  • go buildgo test不再使用-i命令。
  • Go 1.20是以下操作系统的最后一个版本:- Windows 7、8、Server 2008和2012- MacOS 10.13 High Sierra和10.14 Mojave。

参考资料

译自:https://medium.com/@emreodabas_20110/quick-guide-go-1-20-features-cda28b4a31d3

版权声明:本文内容由TeHub注册用户自发贡献,版权归原作者所有,TeHub社区不拥有其著作权,亦不承担相应法律责任。 如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

点赞(0)
收藏(0)
菜鸟一只
你就是个黄焖鸡,又黄又闷又垃圾。

评论(0)

添加评论