Go 1.15 将为 Vet 引入新的检查内容
虽然 Go 1.14 尚未发布(计划于 2 月发布),不过 Robert Griesemer(Go 语言核心维护者兼创始人之一) 已在博客公布了 Go 1.15 开发提案。
Robert 提到,在审查了所有可行的提案后,由于团队各成员一致认为不希望在没有长期计划的情况下逐渐增加新功能,因此经过考量后,决定不在 Go 1.15 加入重大变更,取而代之的是为 go vet 增加两个检查内容,包括在go vet
中对string(int)
转换进行诊断,以及对 interface-interface 类型断言的诊断。还有一个提案是使用常量字符串和索引进行常量求值索引和切片表达式(slice expressions)。
团队原计划在 Go 1.14 版本的go vet
加入诊断string(int)
转换的功能,但因为面临着上线 1.14 的 deadline,所以唯有将此功能推迟至 Go 1.15 上线。string(int)
转换是 Go 在早期加入的功能,但因为有可能会让新手感到疑惑,且 unicode/utf8 套件现已提供该转换功能,而且移除该转换功能会导致向后兼容性出现问题,因此团队决定将此功能引入至go vet
。
下面了解一下 Go 1.15 的三个提案:
#32479. 在go vet
中对string(int)
转换进行诊断
团队原本计划在即将发布的 Go 1.14 实现此项功能,但最后由于存在未解决的问题,所以推迟至在 Go 1.15 中上线该功能。string(int)
转换是在 Go 早期加入的功能,但它会让新手感到疑惑(例如string(10)
的值为 "\n"
而不是 "10"
),而且现在可在unicode/utf8
中使用此功能,所以也就没有使用它的理由了。不过由于删除此功能不是向后兼容的更改,因此团队决定在go vet
中加入对string(int)
转换的诊断。
#4483. 在go vet
中加入对 interface-interface 类型断言的诊断
目前,Go 允许存在任意类型的断言x.(T)
(和相应类型的 switch case),其中x
和T
的类型是接口。然而,如果这两个x
与T
具有相同名称但不同签名的方法,我们不可能为x
指派任何值以实现T
。这种类型的断言将始终在 runtime 阶段 false(或出现 panic 和被评估为 false
)。由于在编译时就已知道这种情况,因此编译器也可能会报告错误。在这种情况下,报告编译器错误不是向后兼容的更改,因此团队也决定在go vet
中加入对 interface-interface 类型断言的诊断。
#28591. 使用常量字符串和索引进行常量求值索引和切片表达式(slice expressions)
用一个或多个常量索引对常量字符串进行索引或切片会分别产生一个非常量的byte
或string
值。但是,如果所有操作数都是常量,则编译器可以对这些表达式进行常量求值,并产生常量(可能是无类型的)结果。这是完全向后兼容的更改,团队建议对规范和编译器进行必要的调整。
(更正:在发布后团队发现此更改不向后兼容;有关详细信息,请参见注释)
至于 Go 的三大难题:包/版本管理、错误处理以及泛型,去年 7 月官方曾试图推动转变错误处理机制,但这引起很大的争议,最后官方决定放弃该提案,而后又有很多建议,但都不足以说服他们新建议比原先的提案更好,因此目前暂时将错误处理功能先行搁置,待未来有更好的解决方案再决定。
Go 团队还提到他们收到的语言变更建议,远比他们能够审核的数量多上不少,光错误处理就有 57 个 issue。团队表示,因为语言更改的成本很高,而且无法了解所带来的收益,因此大多数关于语言变更的提案都会被拒绝。为了减少审核委员会的负担,团队新增了语言变更调查表(https://github.com/golang/proposal/blob/master/go2-language-changes.md),社区成员填写该表将能够让提案审核更有效率。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
每日一博 | 看完这篇,Docker 你就入门了
在计算机技术日新月异的今天,Docker在国内发展的如火如荼,特别是在一线互联网公司,Docker的使用是十分普遍的,在理解docker之前,我们先熟悉两个概念,容器和虚拟机。 一、容器与虚拟机 传统的虚拟机有VMware, VirtualBox ,它们需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统,虚拟机一旦开启,预分配给它们的资源将全部被占用。每一台虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。 而容器技术是和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在用户控件以分离的进程运行。 容器技术是实现操作系统虚拟化的一种途径,可以让您在资源受到隔离的进程中运行应用程序及其依赖关系。通过使用容器,我们可以轻松打包应用程序的代码、配置和依赖关系,将其编程容易使用的构建块,从而实现环境一致性、运营效率、开发人员生产力和版本控制等诸多目标。容器帮助保证应用程序快速、可靠、一致性部署,其间不受部署环境的影响。容器还赋予我们对资源更多的精细化控制能力,让我们的基础设施效率更高、...
- 下一篇
Chrome 将逐步阻止浏览器中的混合内容下载
谷歌在Chromium 博客中宣布,Chrome 将开始阻止“混合内容下载”(安全页面上的非 HTTPS 下载),进一步确保安全性,直至最终完全取消对 Chrome 中不安全下载的支持。 根据谷歌提供的时间表,从 Chrome 82(将于 2020 年 4 月发布)开始,Chrome 将逐渐开始警告并随后阻止这些混合内容下载。对用户构成最大风险的文件类型(例如可执行文件)将首先受到影响,随后的发行版还会涵盖更多文件类型。 具体来看,谷歌将这一过程分为六个步骤,分别是: Chrome 81(将于 2020 年 3 月发布):显示控制台消息,警告所有混合内容下载; Chrome 82(将于 2020 年 4 月发布):警告可执行文件(例如 .exe)的混合内容下载; Chrome 83(将于 2020 年 6 月发布):阻止混合内容可执行文件,警告混合内容档案(.zip)和磁盘镜像(.iso); Chrome 84(将于 2020 年 8 月发布):阻止混合内容的可执行文件、归档文件和磁盘镜像; Chrome 85(将于 2020 年 9 月发布):警告下载图像、音频、视频和文本的混合内容...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装