谷歌云(Google Cloud)近日对Go编程语言进行了更新,据称这是迄今为止最重要的版本,其功能增强了安全性和开发人员的生产力,并提高了Go的性能。
Google Cloud的Go产品和战略负责人Steve Francia称Go 1.18为“里程碑式的”,并指出关键的新功能,包括对泛型的支持,是对全球数百万Go开发者的巨大社区的功能请求的响应。
Go 1.18中的关键更新包括上述对generics的新支持。Francia说,fuzzing将集成到Go 1.18的标准工具链中,CPU性能将提高20%甚至更多。
Constellation Research分析师Holger Mueller说:“这是Go语言的转折点,它获得了关键的新功能,最重要的是性能提升。”
Go于2007年在谷歌创立,旨在帮助开发者构建快速、可靠和安全的软件。该语言保持了六个月的发布节奏。谷歌表示,大约有200万Go开发者。
Generics的情况
Francia在一篇博客文章中写道:“Go语言有史以来最大的变化出现在1.18版本。对于泛型,这一特定功能在过去10年中一直是Go中最受欢迎的功能。我们真的很高兴能够为用户提供它,让他们能够简化应用程序并提供更好的性能。”
泛型编程是计算机编程的一种风格,在这种编程中,算法是按照稍后指定的类型编写的,然后在需要时对作为参数提供的特定类型进行实例化。
VMWare首席工程师Bryan Liles说:“通过类型参数对泛型的支持,Gopher可以提高代码的重用率。仅此一项功能就可以让Go在更多地方更有用,而且打字更少。”
Francia指出,事实上,泛型支持是最受欢迎的功能,因此也是该语言创建以来最大的变化。
“在去年的Go开发者调查中,绝大多数认为泛型是缺失的部分。有了Go 1.18,新的和现有的Go开发者将能够利用泛型带来的生产力、性能和维护优势。我们已经开始看到Gopher在其短期测试期内用泛型构建的新型库和项目,并期待这种创造力随着时间的推移而增长。”
Francia进一步解释说,重要的是,如果不支持泛型,Go用户必须明确定义每种类型,或每种类型的行为。
“一个简单方法是,如果你想写一个min函数,这个函数接受多个值,并告诉你最小值是哪一个。你必须为整数和浮点数写一次。实际上,你必须为每种大小的整数和浮点数写一次。所以最终会有一些重复的代码。”
这只是一个非常简单的例子,但个例子在很多领域都适用。
“通过添加泛型,你可以将所有代码整合到一个特定的操作中,同时保留从类型化语言获得的所有安全性。所以用户真的很期待能有更多可读性的代码。在许多情况下,高性能的代码,与Go一直提供的类型安全性相同。这对生产力是一个巨大的好处,对性能也是一个好处。”
工具链中的fuzzing
Francia说,Go 1.18的第二个重要里程碑是,它使Go成为第一个将模糊化作为其标准工具链一部分的主要编程语言。
他说:“这将使我们能够让Go用户强化应用程序,不仅是针对当前的代码库,甚至在代码库不断发展和依赖关系发生变化时提供保护。”
Francia在他的博客中解释说,模糊化是一种漏洞测试,它向一个软件块抛出任意数据,以暴露未知错误,正在成为企业开发中的一种常见测试方案。
Go现在是第一种提供模糊化支持的主要语言,无需第三方集成,允许开发人员开始以最小的开销构建更安全的软件。
Go的模糊化方法为当前代码提供了额外的安全性,并随着代码和依赖关系的发展提供了持续的保护。
Francia写道:“随着对软件的攻击变得越来越常见和复杂,漏洞检测是企业开发生命周期的关键部分,Go的模糊功能有助于简化这项工作。”
Liles说Go是他最喜欢的编程语言,他也对这一新功能表示赞赏。
“不满足于一个巨大的功能,集成的模糊化将测试提升到一个新的水平。边缘案例对开发团队来说是一个巨大的问题。现在标准库提供了在测试时生成输入以测试边缘案例的支持。我以前从未见过这种级别的支持内置到编程语言中。原生模糊化让Go更进一步,成为真正领先的安全语言。”
20%的性能提升和工作区
同时,由于Go 1.17的寄存器ABI调用约定扩展到了苹果M1、ARM64和PowerPC64架构,在这些架构上使用Go 1.18的开发者将获得高达20%的CPU性能提升。
此外,虽然GO模块几乎已经被普遍采用,但在2021用户调查中,用户最常见的挑战是模块在单个存储库中跨多个模块工作。Go 1.18通过一种新的Go工作区模式解决了这一问题,这使得使用多个模块变得简单。
“一个较小的功能是引入工作区,允许在不修改go.mod文件的情况下更改模块参数。这将使团队编辑代码变得更容易。”
为什么用Go?
也许Go最大的吸引力在于,它像Python等动态语言一样赋予了开发人员生产力,它的性能媲美C和C++那样的编译语言,并且安全性和稳定性超出了任何语言。
Francia说:“所以你会发现,对于开发者来说,这是一个非常好的地方,让他们觉得有效率。他们可以同时编写安全代码和执行代码。”
面向云原生
谷歌是编写大规模软件的先驱之一,Go是谷歌满足这一需求的语言。谷歌开创了大规模编写软件的先河,无论是在大型团队协作编写软件的人数上,还是在运行全世界所有信息的程序规模上。
在追求这个目标的过程中,“我们发现了现有编程语言的挑战。特别是,它们不是为这些现代多核系统设计的,称之为云计算系统。它们也不是为在大群体中共享而设计的。因此,这些语言通常写比读容易得多。随着Go的出现,我们非常强调支持并发性,并在多核系统中良好地工作,非常重视网络和服务,非常重视可读性。Go被广泛认为是最具可读性的语言之一。泛型尤其有助于提高可读性。因此,我认为这使我们更接近我们最初的愿景,即拥有一种使编程再次变得有趣,并使其在人与不同系统之间具有良好可扩展性的语言。”
谷歌还指出,包括Kubernetes和Istio在内的超过75%的CNCF项目是用Go编写的,全球有10%的开发人员用Go。Go在最受欢迎语言的Stack Overflow列表中排名第14,在Coding Dojo 2022年最受欢迎编程语言列表中排名第8。有趣的是,Go在去年的该列表中榜上无名。
Francia写道:“我们的现代云基础设施以Kubernetes为核心,对Istio和Knative的强大支持已经成为了领先服务的基础,比如谷歌Kubernetes引擎(GKE),有Anthos、Cloud Functions和Cloud Run的托管应用平台。谷歌广泛使用Go,从为谷歌搜索提供动力的索引平台,到为Chrome的10亿用户提供动力的服务器端优化,再到谷歌云的基础设施。”
安全是最重要的
Francia说,在Log4j和Heartbleed bug等攻击的情况下,添加模糊化功能只是增加了谷歌帮助确保组织软件供应链安全的承诺。
Go旨在创建最安全的应用程序,尽可能降低风险。Go应用程序编译为一个二进制文件,没有任何本地依赖关系。
Francia写道:“Go的依赖关系管理使用了业界领先的、可篡改的透明日志,以及内置的工具,确保你的依赖关系完全符合预期。Go具有原生加密功能,用于为包括谷歌关键组件在内的大部分互联网提供动力。Go甚至支持无发行版本的容器,在这些容器中不存在任何本地依赖关系。GCP、CI/CD和Artifact Manager可以直接访问Go的漏洞数据库,并可以提供有关安全威胁的即时警告。”
加州大学伯克利分校(UC Berkeley)计算机科学教授、基础设施副总裁兼谷歌研究员Eric Brewer表示,关键在于理解和验证开源依赖链的安全性。
他说:“Go1.18版本是确保开发者能够构建最安全的应用程序、在发现漏洞时了解风险并减少网络安全攻击影响的重要一步。”
原文链接:
https://thenewstack.io/go-1-18-the-programming-languages-biggest-release-yet/
文章评论