Google Go版本1.12的新功能

Google的Go语言(Golang)1.12版现已在其生产版本中提供,并且对工具链,运行时和库的实现进行了更改。

在哪里下载Go

您可以从Go项目站点下载Go的生产版本

[也在InfoWorld上: Google Go语言真正有什么用处 找出! •Deep Dive PDF: 您需要了解有关Google Go的知识 点击Google的Go语言的功能 最好的Go语言IDE和编辑器 ]

当前版本:Go 1.12中的新功能

在编译器工具链中,实时变量分析功能已得到改进。 这可能意味着终结器将比以前的版本更早执行。 如果这是一个问题,则开发人员应考虑添加runtime.KeepAlive调用。

Go 1.12中的其他新功能和更改功能包括:

  • GO111Module设置为ongo命令支持模块目录外部的模块感知操作,前提是这些操作不需要解析相对于当前目录的导入路径或显式编辑mod文件。 目的是默认在Go版本1.13中启用Go模块模式,该版本将于2019年8月发布。
  • 可以同时安全地调用下载和提取模块的go命令。 模块缓存( GOPATH/pkg/mod )必须驻留在支持文件锁定的文件系统中。
  • 当大部分堆保持活动状态时,运行时提供了更好的清除性能。 这样可以减少垃圾回收后的分配延迟。
  • 运行时更积极地将内存释放回OS,特别是对无法重用现有堆空间的大型分配的响应。 对于Linux,运行时现在仅在OS处于内存压力下时才将内存释放到OS。
  • 现在,Linux ARM64体系结构支持Go竞赛检测器,用于查找代码中的竞赛条件。
  • 现在需要构建缓存,以消除$GOPATH/pkg 。 设置环境变量GOCACHE=Off导致写入高速缓存的go命令失败。
  • 支持windows/arm平台。
  • 跟踪工具支持绘制变体利用率曲线,包括对执行跟踪的交叉引用。 这有助于分析垃圾收集器对应用程序延迟和吞吐量的影响。
  • 核心库为TLS(传输层安全性)1.3crypto/tls软件包添加了可选支持。
  • 在实现缓冲I / O的bufio包中,如果在Peek之后调用,则读取器的UnreadRunEUnreadByte方法将返回错误。
  • 在拨叫Darwin时,现在使用libsystem来确保与Apple MacOS和iOS操作系统的未来版本兼容。 切换到libsystem触发了其他App Store检查私有API的使用情况。 由于它被认为是私有的,因此syscall.Getdirentries在iOS上的Enosys失败。 此外,Go 1.12是将在MacOS 10.10 Yosemite上运行的最新版本。 Go 1.13需要MacOS 10.11 El Capitan或更高版本。

先前版本:Go 1.11中的新增功能

Go 1.11于2018年8月发布,具有WebAssembly二进制格式的实验端口。 该端口称为JS / Wasm。 除了潜在的应用程序性能优势外,WebAssembly还提供了一种二进制格式,可以用作其他语言的编译目标,从而可以在客户端和服务器应用程序上进行Web部署。

Go 1.11添加了对模块的初步支持,这些模块是相关的Go软件包的集合。 模块取代了Gopath方法来指定构建中包含哪些源文件。 使用模块,版本依赖性信息是显式但轻量的。 构建是更可靠和可复制的文档状态。

作为模块支持的一部分,已添加了模块感知的go get命令。 要利用模块,开发人员应将其存储库检出到GOPATH/src之外的目录中,创建go.mod文件,然后通过该文件树运行go命令。

Go 1.11的新功能:

  • 软件包org/x/tools/go/packages提供了一个用于查找和加载源代码org/x/tools/go/packages的API。 该程序包尚未包括在标准库中,但实际上替代了go/build程序包,后者的API无法完全支持模块。 新软件包支持开发与构建工具(例如Buck和Bazel)同样出色的分析工具。
  • runtime/trace包的用户注释API可以在执行跟踪中记录应用程序级别的信息,并创建相关的goroutine组。 go tool trace命令可以在跟踪视图和新的用户任务/区域分析页面中可视化此信息。
  • 版本1.11是最后一个支持设置环境变量GOCACHE=off以禁用构建缓存。 在Go 1.12中,将需要构建缓存来消除$GOPATH/pkg
  • 编译器工具链在行指令中支持列信息。
  • 默认情况下,更多编译器工具链函数都可以进行内联。
  • 对于调试,编译器现在可以为优化的二进制文件提供更准确的调试信息,包括可变位置信息和断点位置。
  • 当所分析的软件包未进行类型检查时, go vet命令现在报告一个致命错误。
  • 运行时使用稀疏堆布局,因此Go堆的大小不再受限制。
  • 对标准库的微小更改包括删除了较旧的平台支持。

Go 1.11发行版需要MacOS 10.10 Yosemite或更高版本,Windows 7或更高版本或OpenBSD 6.2或更高版本。 已删除了对这些操作系统的早期版本的支持。

先前版本:Google Go 1.10中的新功能

升级提供了编译器工具链和性能改进,但没有实质性的语言更改。 Go 1.10于2018年2月发布,提供以下主要功能:

  • 改进了编译器生成的代码的性能,这些代码分布在受支持的体系结构中。
  • 由于加快了垃圾收集,更好的代码生成和核心库优化的速度,程序的运行速度应略有提高。
  • 二进制文件中的小调试信息已得到改进,现在记录了恒定值。 此外,行号信息更准确。
  • linux / ppc64le端口现在需要使用cgo命令与任何程序进行外部链接。
  • go build命令根据源文件的内容,指定的构建标志以及存储的程序包中的元数据来检测过期的程序包。 修改时间不再相关。
  • 现在, go install命令仅安装命令行上列出的软件包和命令。 要强制安装依赖项,开发人员应使用go install –i标志
  • 更新方法表达式的语法会放宽语法,因此可以将任何类型表达式作为接收器,从而与编译器已运行的方式匹配。
  • 现在可以通过go test缓存测试结果。
  • Unicode软件包已从Unicode 9.0升级到版本10.0,增加了8,518个字符,包括比特币货币符号和56个表情符号。

以前的版本:Google Go 1.9的新功能

Google在2017年8月发布了Go 1.9。以下是新功能和改进功能:

  • 垃圾收集器中的提速,生成更好的代码以及核心库优化应使程序运行更快。
  • math / bits软件包提供了优化的实现来操纵位。 编译器将此程序包中的函数视为内在函数,以提高性能。
  • Go 1.9编译器支持利用多个处理器内核对程序包中的函数进行并行编译。 Go 1.9保留了先前版本的go命令对并行编译单独软件包的支持。 并行编译默认情况下处于启用状态,但可以禁用。
  • 为了实现可伸缩性,Go 1.9添加了对类型别名声明的支持,以进行代码修复。 更改Go语言后,类型别名支持在包之间移动类型时逐步修复代码。 它应有助于大规模重构期间的代码修复,以一种使引用旧名称的代码与引用新名称的代码互操作的方式从包中移动类型。 本质上,类型别名的引入提供了一个过渡期,在此期间,新旧软件包均可使用该API,从而使对旧版本和新版本的引用都可以互操作。
  • Go 1.9添加了透明的单调时间支持,这使得在有挂钟调整的情况下,两个Time值之间的计算持续Time成为安全的操作。
  • Go 1.9使用新方法将调用函数标记为测试助手功能,从而改进了测试助手功能。
  • 同步包中的一种新类型用作并发映射,其中包含分摊的固定时间加载,存储和删除。 因此,多个go例程可以同时调用地图的方法。

翻译自: https://www.infoworld.com/article/3201037/whats-new-in-googles-go-language.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值