Go 1.12 版本的新特性

栏目: Go · 发布时间: 5年前

内容简介:昨天,Go 官方发布 1.12 版本。本文介绍下 Go 1.12 版本变更的内容。Go 1.12 正式版发布了,距离上个正式发布版 Go 1.11 已经过去半年。跟往常一样,Go 1.12 保持了 兼容性承诺,预期所有 Go 程序会像之前一样正常编译。新版本的更新亮点有: TLS 1.3 的初步支持、模块支持的更强大以及提升 macOS & iOS 的前向兼容性。新版在语言规范方面没做改动。

昨天,Go 官方发布 1.12 版本。本文介绍下 Go 1.12 版本变更的内容。

Go 1.12 正式版发布了,距离上个正式发布版 Go 1.11 已经过去半年。跟往常一样,Go 1.12 保持了 兼容性承诺,预期所有 Go 程序会像之前一样正常编译。新版本的更新亮点有: TLS 1.3 的初步支持、模块支持的更强大以及提升 macOS & iOS 的前向兼容性。新版在语言规范方面没做改动。

Go 1.12 版本的新特性

工具

go tool vet
go tool tour
Go 1.13

GO111MODULE 设置为 on 时,go 命令现在支持模块目录之外的模块感知操作,前提是这些操作不需要解析相对于当前目录的导入路径或显式编辑 go.mod 文件。诸如 go getgo listgo mod download 之类的命令就像在具有初始空要求的模块中一样。

go 命令下载和解压缩模块现在可以安全地同时调用。模块高速缓存(GOPATH/pkg/mod)必须驻留在支持文件锁定的文件系统中。

go.mod 文件中的 go 指令现在指示该模块中文件使用的语言版本。如果没有现有版本,它将被设置为当前版本(go 1.12)。如果模块的go指令指定的版本比正在使用的 工具 链更新,则 go 命令将尝试构建软件包,并且仅在该构建失败时才会记录不匹配。

当使用活动模块无法解析导入时,go 命令现在将在查询模块高速缓存和常用网络源之前尝试使用主模块的replace 指令中提到的模块。如果找到匹配的替换但但replace指令未指定版本,则 go 命令使用从零 time.Time (例如 v0.0.0-00010101000000-000000000000 )派生的伪版本。

Runtime

  • 提升了大量堆(Heap)活跃状态情况下的清理性能,这减少了垃圾回收之后的分配延迟,可以更好地将内存释放回操作系统;
  • Runtime 的 timer 和 deadline 代码随着 CPU 数目的增加,会有更好的表现。这提升了网络连接最后期限(deadline)相关操作的性能;
  • 对大型堆分配的相关修复,提升了内存配置文件的精确性;

平台相关

其中关于 FreeBSD 和 macOS,Go 1.12 是最后一个支持 FreeBSD 10.x 和 macOS 10.10 Yosemite 的版本。下个版本的 Go 1.13 将要求 FreeBSD 11.2+ 或 FreeBSD 12.0+,对于 macOS,则要求 macOS 10.11 El Capitan 或更新版本。

核心库

  • TLS 1.3

Go 1.12 在 RFC 8446 指定的 crypto/tls 包中添加了对 TLS 1.3 的选择支持。可以通过将值 tls13 = 1 添加到 GODEBUG 环境变量来启用它。 它将在 Go 1.13 中默认启用。

  • 库的微小变更。与往常一样,承诺保持 Go 1 的兼容性情况下,库中有各种微小的更改和更新。

小结

Go 的包管理是一直为人诟病,从 Go 1.5 引入的 vendor 机制,到准官方工具 depgo modules 随着 Go 1.11 的发布而和我们见面了,这是官方提倡的包管理,乃至项目管理机制,可以不再需要GOPATH的存在。到当前的 Go 1.12 ,Go 语言做了很多努力,正如 Go 官方博客所说:

2018 was a great year for the Golang ecosystem, with package management as one of our major focuses. 

2018 年是 Go 生态系统的重要一年,包装管理是我们的主要关注点之一。 2018 年 2 月,在社区范围内讨论如何将软件包管理直接集成到Go工具链中,并且在8月份,Go 1.11中提供了该功能的第一个粗略实现,称为 go modules 。 迁移到 go modules 将是 Go 生态系统中影响最深远的变化。转换整个生态系统:代码、用户、工具等。从 GOPATH 转换到模块将需要在许多不同领域开展工作。 模块系统将帮助我们为Go生态系统提供更好的身份验证和构建速度。

相比 godep 和 vendor 机制而言, go modules 已经很先进,Go 1.12 已经发布,可以考虑逐步迁移到go modules。

了解更详细的发布日志, 查看原文


以上所述就是小编给大家介绍的《Go 1.12 版本的新特性》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

可伸缩架构

可伸缩架构

【美】Lee Atchison / 张若飞、张现双 / 电子工业出版社 / 2017-7 / 65

随着互联网的发展越来越成熟,流量和数据量飞速增长,许多公司的关键应用程序都面临着伸缩性的问题,系统变得越来越复杂和脆弱,从而导致风险上升、可用性降低。《可伸缩架构:面向增长应用的高可用》是一本实践指南,让IT、DevOps和系统稳定性管理员能够了解到,如何避免应用程序在发展过程中变得缓慢、数据不一致或者彻底不可用等问题。规模增长并不只意味着处理更多的用户,还包括管理更多的风险和保证系统的可用性。作......一起来看看 《可伸缩架构》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

html转js在线工具
html转js在线工具

html转js在线工具