迈向 Go 2 的下一步

2019年06月28日

Go 2 又有进展了,近日 Go 团队在博客公布了关于 Go 2 下一步的计划。根据此前的报道,所谓的 Go 2 并非一个单独的重大更新版本,而是通过“增量(incremental)更新”的方式以逐渐抵达 "Go 2.0",所以期间的版本都能看到 Go 2 的影子。

当前状态

Go 团队表示正准备推出 Go 1.13,有望在今年 8 月初发布。经历长时间的开发后,这会是首个包括对语言特性进行具体更改的重要版本,而不仅仅是针对规范的小调整。

为了实现这些变化,Go 团队从一小系列可行的提案开始,这些提案很大一部分来自 GitHub 中被标记为提案的 issue 列表此文讲述过关于提案新的评估流程,团队希望所选择的提案对语言的改动较小,而且几乎没有争议,这样是为了保证经历完全程后,最终能实现这些提案。另外,提案引起的变更必须向后兼容,以实现最小的破坏性。

总而言之,初始阶段的变更不是为了解决重大问题,更多的是希望 Go 社区重新活跃起来,并从新的流程中汲取经验。

对于原始的提案列表 —— 通用 Unicode 标识符二进制整数字面量(binary integer literals)用于数字字面量的分隔符和 signed integer shift counts,官方表示已采纳部分并对它们进行了修改。如关于二进制字面量的提案,团队已对其进行了显著的扩展,并对 Go 的数字字面量语法进行全面和现代化的改进。

Go 团队还将错误处理(error inspection) 添加到了 Go 2 的草案设计提案中,该提案已被部分接受。

在 Go 1.13 中,我们将能看到这些变化,不过官方表示现在关注的重点是 Go 1.14,并确定接下来要解决的问题。

关于 Go 1.14 的提案

Go 团队表示当前对 Go 语言的目标依旧和 2007 年的一致:成为一门使软件开发更具伸缩性的语言。在这条路上,改进 Go 伸缩性的三大难题包括:包/版本管理、错误处理以及泛型。

不过随着对 Go module 的支持日益强大,团队正在努力解决对包/版本管理支持的问题。所以现在主要剩下错误处理和泛型的问题亟需解决。

团队一直在研究和它们相关的问题,并在去年的 GopherCon 大会上提出了设计草案。自那时起,团队就一直在迭代和改进这些设计。对于错误处理,他们发布了一个详细的、经过重大修改和简化的草案。对于泛型,团队表示已取得进展,今年还在 GopherCon 上进行了一场名为 “Generics in Go” 的演讲(Ian Lance Taylor 作为演讲者),不过尚未达到具体的提案阶段。

团队希望给 Go 语言带去一些小的改进,所以为 Go 1.14 选择了以下这些提案:

下一步

团队正在积极征求对这些提案的反馈意见。他们希望看到用户在基于事实的情况下,解释为什么提案可能在实践中不能很好地运作,或者指出团队在设计中欠缺考虑的问题等。对于仅包含个人意见的评论,团队表示可以承认它们,但无法以任何建设性的方式来解决这些问题。

最后,如果没有充分的理由阻止这些提案进入试验阶段,团队将会在 Go 1.14 的开发周期(2019年8月初开始)中实现它们,以便在实践中对其进行评估。根据提案评估流程,Go 1.14 预计将在开发周期结束时(2019年11月初)完成。

展开阅读全文
28 收藏
分享
加载中
精彩评论
错误处理真的丑
2019-06-28 09:42
17
举报
泛型,这个东西还是要加上的。
2019-06-28 08:13
16
举报
人生苦短,我用python
生态第一,我用java
2019-06-28 12:21
9
举报
说不要泛型的啪啪被打脸
2019-06-28 08:52
8
举报
一定要加上条件表达式运算:val = exp ? val1 : val2
2019-06-28 15:14
7
举报
最新评论 (72)
简单的学了一下,感觉很多地方语法都合其他语言相反,也有很多需要改进的。我认为学语言,还是学稳定的好,感觉go还会有很大的进步空间,等2.0正式出来了再学。
2019-09-03 15:18
0
回复
举报
人生苦短,我用Python 生态第一,我用Java
2019-07-07 18:52
0
回复
举报
前年自己学习写了个demo,不知道现在泛型加上去了没有
2019-07-05 17:07
0
回复
举报
版本代号 school
2019-07-05 08:54
0
回复
举报
从现在的时代来看,GO十分不成熟,很不够成熟...至于那些说好用的人要么就是做的东西太简单,要么就是会C然后在GO里混C写.
2019-07-04 21:04
2
回复
举报
bilibili简单么
2019-08-02 09:54
0
回复
举报
开发web效率并不高
2019-07-04 19:06
0
回复
举报
和什么语言比
2019-07-23 09:43
0
回复
举报
func CopyFile(src, dst string) (err error) {
defer func() {
if err != nil {
err = fmt.Errorf("copy %s %s: %v", src, dst, err)
}
}()

r := try(os.Open(src))
defer r.Close()

w := try(os.Create(dst))
// 这里一定得写注释,不然容易混乱,出现两种风格了。
defer func() {
w.Close()
if err != nil {
os.Remove(dst) // only if a “try” fails
}
}()

try(io.Copy(w, r))
try(w.Close())
return nil
}

如果这样写,不进行注释的话会容易混乱!!!
2019-07-04 15:32
0
回复
举报
rust啊,这些都有了,速度更快,哈哈
2019-07-04 10:03
0
回复
举报
rust开发效率不高啊。。
2019-07-04 17:42
0
回复
举报
得看做什么和熟悉程度了
2019-07-04 18:05
0
回复
举报
熟悉度,基本参考c++吧,rust想写好也不简单。同时rust人才不好招,虽然C++转也还好,但是成本在哪
2019-07-05 08:56
0
回复
举报
golang需要完善生态,而不是什么try catch,err语法糖,没有这些,golang也发展的很好,如果有兴趣,找找当初golang确定语言标准的时候为什么没有加这些东西,也是有一定自己的设计原则在里面的
2019-07-04 10:00
1
回复
举报
已弃.
2019-07-01 18:14
1
回复
举报
更多评论
72 评论
28 收藏
分享
返回顶部
顶部