Go 1.12

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

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

工具

  • go tool vet 不再支持;

  • 二进制包在下个版本将不再支持;

  • go tool tour 不再包含在主二进制发行版中,需要手动安装;

  • Go 1.12 在 trace 工具加入了Mutator Utilization 图的支持,它可以方便发现 GC 性能受限的情况;

  • Go Module 进一步支持。计划在 Go 1.13 默认启用 module 模式。

当 GO111MODULE 设置为 on 时,go 命令现在支持模块目录之外的模块感知操作,前提是这些操作不需要解析相对于当前目录的导入路径或显式编辑 go.mod 文件。诸如 go get ,go list 和 go 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。

了解更详细的发布日志,查看原文 https://golang.org/doc/go1.12 。

订阅最新文章,欢迎关注我的公众号

微信公众号

参考

  1. Go 1.12 Release Notes

  2. Go Modules in 2019

dep指定版本 go_Go 1.12 版本的新特性相关推荐

  1. Vite 2.0版本发布,都有哪些新特性

    新年还没过完,Vite就发布了2.0版本,不得不佩服尤大大. Vite是什么 Vite(法语意思是 "快",发音为 /vit/,类似 veet)是一种全新的前端构建工具,你可以把它 ...

  2. 分而治之:Oracle 18c 及 12.2 分区新特性的 N 种优化实践(含PPT)

    关注"数据和云",精彩不容错过 本文根据 杨廷琨 2018 年 5 月 11 日在[第九届中国数据库技术大会]上的演讲内容整理而成,关注公众号并回复 "Yangtingk ...

  3. Android 12 变更与新特性

    Date:2021.7 文章目录 Android 12新特性总结 一.设置 二.通知 1. 媒体控制界面 2. 媒体控制 3. 休眠功能 4. 通知界面更新 5. trampoline 三.消息框To ...

  4. WWDC 2018:iOS 12 通知的新特性

    Session 710 : What's New in User Notifications iOS 10 新增的 UserNotifications.framework 用一套易用的接口替换了之前版 ...

  5. Java 12正式发布,新特性解读!

    Java 12 如约而至,除了那些值得关注的特性,你也应该思考下 Java 的未来. 在 Java 9 之前,当一个版本被宣布为首选版本,存在一个"培育"(bedded-in)新 ...

  6. 无路可逃:Oracle 12.2 BigSCN新特性可能的DB Link兼容性问题

    在<云和恩墨技术通讯>的3月刊中,我们再次强调了关于 SCN 问题的预警,提醒大家在2019年6月23日之前采取必要的措施. 下载链接: https://cs.enmotech.com/d ...

  7. iOS 12正式版新特性总结

    距离苹果WWDC发布会举行已久,苹果在昨日(9月18)开始向用户推送iOS 12 GM版,据称本次iOS的更新内容主要是性能方面的提升,打开相机的速度提升70%,屏幕键盘呼出速度提升50%,其它App ...

  8. Java 12 switch表达式新特性(->,yield)

    switch表达式 使用switch时,如果遗漏了break,就会造成严重的逻辑错误,而且不易在源代码中发现错误.从Java 12开始,switch语句升级为更简洁的表达式语法,使用类似模式匹配(Pa ...

  9. 12.5.2 升12.5.3的补丁 linux下载,lolv3.2.3.2-V4.0.5.1升级-lolv3.2.3.2-V4.0.5.1升级补丁【7.12版本】下载官方最新版-西西软件下载...

    lol在今日更新了最新的7.12版本,相信不少的小伙伴都在等待了最新版本的更新版,在新的版本中扎氪卡卡尔玛进一步的消弱,趣味的血月模式也上线了,现在你通过下载最新的lolv3.2.3.2-V4.0.5 ...

最新文章

  1. TopShell管理服务
  2. 网络安全系列之十一 系统命令注入***
  3. TensorFlow2-神经网络训练
  4. ceph-deploy install时,远端节点在执行apt-get update命令时失败
  5. MFC的Serialize机制及其使用(转)
  6. android9系统webview崩溃,Android WebView已开始在Android 9上崩溃
  7. 无法初始化java类_myeclip运行java程序不能初始化类 NoClassDefFoundError
  8. Spring Caching抽象和Google Guava Cache
  9. 字符设备驱动高级篇2——字符设备驱动注册代码分析
  10. android计算距离顶部的距离,(lua版)计算距离的逻辑是从Android的提供的接口(Location.distanceBetween)中拔来的,应该是最精确的方法了...
  11. NeurIPS 2021揭榜,接收率创九年新高,中了吗中了吗?
  12. 北京大学计算机专业王腾,王腾(北京大学地球与空间科学学院助理教授)_百度百科...
  13. jquery ajax get 数组参数
  14. matlab中求解非线性方程组的函数,利用solve函数求解非线性方程组的问题
  15. 1400+款调色预设LR/PS/PR/FCPX/达芬奇lightroom滤镜LUT素材
  16. 南航的计算机专业好考吗,南航计算机拟录取名单公布,各个专业都有倒数第一逆袭成功...
  17. BS 和CS的区别
  18. ESP8266+安信可微信智能配网
  19. 抖音抖加是什么?dou+怎么投放?豆荚什么时候投最好?
  20. 广告词 android,广告语猜猜看

热门文章

  1. 完整的WebApplication JSF EJB JPA JAAS –第1部分
  2. TestNG或JUnit
  3. 计算机维修与维护入门,计算机组装与维护基础知识
  4. 代码流程图生成器_【进阶Python】第五讲:迭代器与生成器
  5. MacOS 下如何创建文本文件
  6. MyEclipse的build、clean、publish、clean(redeploy)的区别
  7. boss直聘账号异常登不上_【苹果IOS游戏账号分享】据说是最欢乐的2D冒险游戏?Q萌有趣,好不好玩你说了算——惊奇剑士...
  8. mysql数据库增删改查关键字_mysql数据库的增删改查
  9. 信工干货||C语言中的运算符和表达式
  10. C语言中#if,#if defined ,#ifdef,extern的用法描述