Golang:一步一步走向Go 2(继包管理以后,Go将实现try,泛型也在考虑之列)

原文:blog.golang.org/go2-next-st…golang

现状ide

不出意外的话,咱们将会在2019年8月发布Go 1.13版本。这是第一次对Go语言进行很实在的改变(而不是规范性的微调),这些改变很早之前就提出来,可是一直拖延着。函数

为了实现语言的改变,咱们遵守“Go 2, here we come!” 文档中的评估流程,先从 Go 2 proposals (Go 2提案列表) 中挑选了一小部分可行的提案。加密

咱们但愿咱们最初挑选的提案相对较小,而且几乎没有争议,以便于更大可能性去完成这些变动。这些“变动”的提案必须向后兼容才能最小化对模块的破坏性,这些模块容许指定Go语言版本,而不是默认构建方式。简而言之,做为第一轮的变革,主要仍是为了迭代积累经验,而不是为了解决重大问题。设计

在原始提案列表中进行了修剪和扩展的提案:code

通用Unicode标识符general Unicode identifiers 二进制整数文字binary integer literals 数字文本的分隔符separators for number literals 有符号整数移位计数signed integer shift counts 因为咱们没有及时制定“通常的Unicode标识符”这个提案的具体的设计文档,所以咱们没有对它进行修整。“二进制整数文字”的提案获得了显着扩展,并对Go的数字文本语法进行了全面的改革和现代化。咱们在错误检查中添加了Go 2草案设计方案,该提案已被部分接受。blog

通过Go 1.13的这些初步变化以后,如今是时候期待Go 1.14,并肯定咱们接下来要解决哪些问题。接口

Go 1.14的相关提案unicode

不忘初心,Go语言目前的目标与2007年相同:使软件开发规模化。然而“包版本管理”、“错误处理机制”和“泛型”这三大问题阻碍了Go语言的发展。开发

随着Go module的支持愈来愈强大,咱们解决了包及包版本的管理,因而三大问题中就剩下了“错误处理”和“泛型”。

咱们一直在努力解决这两个问题,并在去年的丹佛GopherCon上展现了草图设计 draft designs,并一直迭代。

在错误处理方面,咱们发布了一个具体的、通过重大修改和简化的提案(下文中会提到)。

在泛型方面,咱们还在努力中。在今年的圣地亚哥GopherCon上发表了一篇与之相关的谈话 (“Generics in Go” by Ian Lance Taylor) coming up 可是咱们尚未具体的相关提案。

咱们也但愿能继续完成一些小改进。针对Go1.14版本,咱们挑选了如下一些提案:

#32437. 内建的错误处理函数, “try” (design doc).

这是一个改进错误处理机制的具体提议。这个提议向后兼容性很弱,可是咱们但愿经过这个提议可以大大改善错误处理的方式。这个提议已经吸引了大量的意见反馈,所以不太容易跟进。咱们建议从初始评论initial comment 开始,以便于快速了解概述,而后再阅读详细的设计文档。这个初始评论initial comment 包括几个连接,这几个连接是迄今为止的反馈的摘要。若是你想提交反馈,在提交以前,请遵照反馈建议(请参阅下面的“后续步骤”部分)

#6977. 容许嵌套接口 (design doc).

容许嵌套接口是一个老提案,而且是一个向后兼容的提案。

#32479 go vet中诊断 string(int) 转换.

在Go语言早期,为了方便引入了 string(int) 转换,然而这种方式很容易让新手混淆(string(10) 转换后是"\n",而不是"10")而且这种转换方式在当今unicode/utf8包可用的状况下不合理。然而,删除这种转换会致使不向后兼容,所以咱们提议先使用vet 诊断错误。

#32466 采用加密原则 (design doc).

这是对咱们但愿采用的加密库的一组设计原则的反馈。另请参阅crypto/tls中关于删除SSLv3 支持的提议.

后续步骤

咱们正在积极征求关于这些提案的反馈意见。咱们特别想了解的是基于事实的证据,请在反馈中说明为何提案可能在实践中不能很好地运做,或者咱们可能在设计中遗漏的问题。

若是支持提案,列举出使人信服的例子也很是有用。

另外一方面,请不要发布仅包含针对我的因素的问题:咱们能够理解,但咱们没法以任何建设性的方式解决。

在发布反馈以前,请花点时间认真阅读详细的设计文档和以前的别人提出的反馈或反馈摘要。特别是这些提案在通过了长期讨论后,您的关注的问题可能已在早期的评论中提出并进行了讨论。

不出意外,咱们计划在Go 1.14版本中(2019年8月初)开始实施全部这些提案,以便在实践中对它们进行评估(实践是检验一切的真理)。根据提案评估流程,最终决定将在开发周期结束时(2019年11月初)完成。

感谢您帮助Go成为更好的语言!

相关文章
相关标签/搜索