优秀的编程知识分享平台

网站首页 > 技术文章 正文

Go 1.9版本即将到来,众多新功能一览

nanyue 2024-11-02 12:19:15 技术文章 6 ℃

Go语言的发布就像钟表一样规律——基本每六个月发布一次,广大程序员也不用等的太辛苦。要知道,Go语言现在已经十分火热了。Go 1.8于2017年2月发布,所以,还有两个月,GO 1.9将与广大程序员见面。

根据thedraft的发行说明,新版的Go语言有不小的变化,增加了对类别别名的支持,大多数更改是在工具链,运行时和库的实现层面。该版本还增加了并行编译包中的函数,同时更好地支持测试,包括一个新的位操作包,并具有新的并发映射类型。

键入别名

回到语言更改:新版本将支持类型别名以支持逐行代码修复,同时可在包之间移动类型。

提案中写道:主要动机是在大规模重构过程中实现逐步的代码修复,特别是将类型从一个包转移到另一个包,这样引用代码旧名与代码互操作指的是新名称。类型别名对于允许将大型软件包分解为具有单个导出API的多个软件包以及用于对现有软件包的扩展版本进行实验也是有用的。

简而言之,类型别名声明的形式如下:

type T1 = T2

该声明引入了一个别名T1,表示为T2的类型。也就是说,T1和T2都表示相同的类型。

兼容性

现有代码继续编译,符合兼容性准则。

在库中,go/ast的TypeSpec有一个新的领域,go/types有一个新的类型,即types.Alias。这些都是库级别的更改。Go类型语义的代码可能需要更新以处理别名,这会影响到编程工具,但这在几乎任何语言的更改中都是无可避免的。

Go 1.9 - 概述

  • 性能

根据发布说明草案,由于垃圾收集器的加速,生成的代码更好,核心库的优化,大多数程序应该会运行得更快一些。

  • 垃圾收集器

用于触发垃圾收集的库函数现在可触发并发垃圾收集。具体来说,runtime.GC,debug.SetGCPercent和debug.FreeOSMemory,可触发并发垃圾回收,阻止调用goroutine,直到垃圾收集完成。

此外,如果由于新的GOGC值的需要,debug.SetGCPercent函数可以仅触发垃圾回收,这使得可以即时调整GOGC。

在使用包含许多对象的大型(> 50GB)堆的应用程序中,对象的分配性能显着提高。

runtime.ReadMemStats函数即使对于非常大的堆也少于100μs。

工具

  • 并行编译

Go编译器现在可利用多个内核支持并行编译程序包的功能。默认情况下,并行编译是打开的,但可以通过将环境变量G019CONCURRENTCOMPILATION设置为0来禁用。

  • vendor与./...匹配

./ ...不再匹配工具接收包名下vendor目录中的包,例如go test。要匹配vendor目录,请写./vendor / ....

  • 编译器工具链

链接器现在将为Windows上的cgo可执行文件生成DWARF信息。

编译器现在包括生成的DWARF中的词法作用域,允许调试器隐藏不在范围内的变量。.debug_info部分现在是DWARF版本4。

GOARM和GO386的值将影响编译包的构建ID,由go工具的依赖关系缓存所使用。

  • Doc

长的参数列表现在被截断,这提高了go doc对某些生成代码的可读性。

go doc struct.field支持查看struct字段的文档。

  • Env

新的env -json flag启用JSON输出,而不是默认的操作系统特定的输出格式。

  • Test

go测试命令接受一个新的-list标志,它将正则表达式作为参数,并打印到stdout与其匹配的任何测试,基准或示例的名称,而不运行它们。

  • Pprof

go工具pprof命令现在使用环境中定义的HTTP代理信息usehttp.ProxyFromEnvironment。

  • TODO

TODO:完成记录各项工具更改

CL 42028:https://golang.org/cl/42028:cmd / asm:修正ARM的MULA指令的操作数顺序

CL 40112:https://golang.org/cl/40112:cmd / go:允许在go vet中进行完整的标志处理

CL 42990:https://golang.org/cl/42990:cmd / internal / obj / x86:add ADDSUBPS / PD

CL 40331:https://golang.org/cl/40331:cmd / link,runtime / cgo:启用OpenBSD上的PT_TLS

最近发表
标签列表