APP下载

官方启动Go2草稿设计发想,要将Go推向大型专案

消息来源:baojiabao.com 作者: 发布时间:2024-05-16

报价宝综合消息官方启动Go2草稿设计发想,要将Go推向大型专案

Go官方已经开始着手Go 2的开发程序,并启动设计草稿发想,率先丢出了三个讨论提案,分别是错误处理(Error Handling)、错误值语意(Error Values)以及泛型(Generics),官方强调,这些提案还只是草稿设计,并非正式官方提案,欢迎Go使用者参与讨论改进。

这些草案设计并非Go提案流程意义上的正式提案,而是作为抛砖引玉,给社群一个讨论的起点,最终目标是产生够好的设计,以转化成实际的正式提案。官方提到,每个草案设计应该都要附有问题概述,来帮助社群理解设计背景,并且提供足够的设计细节,帮助建构和指引有关的讨论。官方列出的泛型、错误值语意以及错误处理三个设计草案作为示范,希望所有Go用户都能帮忙改进,并转成最终的提案。

Go团队提到,Go 2的整体目标是要解决Go无法扩展使用在大型程式码基底,与大型开发人员工作的问题,而他们在Go首次开源前,就一直讨论泛型的可能。在参考C++和Java的经验后,他们发现这主题需要一段时间理解,才能设计出良好的解决方案,在社群中有人错误认为,Go团队的立场永远不会有泛型,官方提到,相反的,因为他们理解虽然泛型会为Go带来更多灵活性,但同时也会让Go变得复杂许多。

现在Go团队提出设计草案,建议扩展Go语言,为类别和函数增加可选的类别参数。目标是要让开发者在撰写Go函式库的时候,这些函式库抽象不需要类别细节,特别是除了预期中的容器类别之外,Go团队也希望可以编写有用的函式库,来操作任意的map和channel值,最理想的状态是可撰写执行在 []byte和string上的多型函数。

同时设计草稿也提到,其他类别的参数化不在目标中,像是透过常量进行的参数化,另外,以位元包装定义通用向量和特殊案例向量,这类实作多型定义的特化实现也并非目标。

致力于让Go迈向大型程式码应用,除了程式必须轻量、不过度重复并且强健外,在出现错误时还要能优雅地处理错误。Go团队希望Go的错误检查可以更加轻量化,减少专用于错误检查的Go程式文字,此外,也朝更方便撰写错误处理程式码的方向前进,进而提升开发者执行这项工作的意愿。而且错误检查和错误处理的工作都必须外显,也就是说在程式文字必须可见,Go团队认为,他们不想重蹈覆辙异常处理的陷阱。在进行错误处理改进工作,必须让现有的所有程式都适用。

Go团队在设计草案中,为此引入两种新的语法形式,首先使用检查表示式检查f(x, y, z)和错误,并标记出显性错误,其次加入定义错误处理程式的处理语句,当错误检查失败时,会将控制权转移到内层处理程式,该处理程式会将控制权再转移到下一个处理程式,以此类推直到处理程式执行return语句。

错误处理可以检查并且回应错误之外,良好的报告错误也是非常重要的工作。由于错误值是实作错误界面的任何值,Go程式会以4种方式测试特定错误。无论哪种方式,当原始错误是已知的标记或已知的错误实作类别,则无论是透过fmt.Errorf,抑或是WriteError这类新类别,都会破坏相等性检查并键入断言以查询原始错误。而这将阻止包装,使得有用的错误减少。

在复杂的程式中,最有用的错误叙述,必须包括导致错误的所有不同操作的讯息。而错误值语意设计草稿解决了两个问题,错误检阅和错误格式化,分别会由不同的草案解决,同样会在维持与现有程式码互通的情况下,允许套件继续定义自己的错误类别,以指向错误实作能够满足的定义可选界面方向。

Go团队希望所有使用者可以帮忙改进草案,使其可以转为正式的Go提案,官方建立了一个维基页面,以收集和组织每个主题的回馈。

2018-08-31 18:31:00

相关文章