Go 编程语言 1.18 发布

Go 1.18 编程语言发布,由 Google 在社区参与下开发,作为一种混合解决方案,结合了编译语言的高性能和脚本语言易于编写代码等优点、开发速度和错误保护。 项目代码在 BSD 许可证下分发。

Go 的语法基于熟悉的 C 语言元素,并借鉴了一些 Python 语言。 语言相当简洁,但代码很容易阅读和理解。 Go 代码被编译成独立的二进制可执行文件,无需使用虚拟机即可在本机运行(分析、调试模块和其他运行时问题检测子系统集成为运行时组件),从而实现与 C 程序相当的性能。

该项目最初开发时着眼于多线程编程和多核系统上的高效运行,包括提供用于组织并行计算和并行执行方法之间交互的操作员级手段。 该语言还提供针对过度分配的内存块的内置保护,并提供使用垃圾收集器的能力。

新版本增加了对泛型函数和类型(泛型)的支持,开发人员可以借助泛型函数和类型来定义和使用旨在同时处理多种类型的函数。还可以使用接口来创建跨越多种数据类型的组合类型。实现对泛型的支持不会破坏与现有代码的向后兼容性。 // 求和设置值,适用于 int64 和 float64 类型 func SumIntsOrFloats[K相当,V int64 | float64](m map[K]V) V { var s V for _, v := range m { s += v } return s } // 具有泛型类型定义的另一个选项: type Number interface { int64 | float64 } func SumNumbers[K 可比较,V Number](m map[K]V) V { var s V for _, v := range m { s += v } return s }

其他改进:

  • 用于模糊代码测试的实用程序已集成到标准工具包中。在模糊测试期间,会生成输入数据的所有可能随机组合的流,并记录处理过程中可能出现的故障。如果序列崩溃或与预期响应不匹配,则此行为很可能表明存在错误或漏洞。
  • 添加了对多模块工作区的支持,允许您同时在多个模块上执行命令,从而允许您同时在多个模块中构建和运行代码。
  • 针对基于 Apple M1、ARM64 和 PowerPC64 处理器的系统进行了重大性能优化。启用使用寄存器而不是堆栈将参数传递给函数并返回结果的能力。改进了编译器对循环的内联展开。编译器中的类型检查已完全重新设计。一些测试显示,与之前的版本相比,代码性能提高了 20%,但编译本身花费的时间大约长 15%。
  • 在运行时,将释放的内存返回给操作系统的效率得到了提高,垃圾收集器的操作也得到了改进,其行为变得更加可预测。
  • 新的包 net/netip 和 debug/buildinfo 已添加到标准库中。默认情况下,客户端代码中禁用对 TLS 1.0 和 1.1 的支持。 crypto/x509 模块已停止处理使用 SHA-1 哈希签名的证书。
  • 对 Linux 环境的要求已经提高;为了工作,您现在需要有至少 2.6.32 版本的 Linux 内核。在下一个版本中,预计 FreeBSD 也会发生类似的变化(将停止对 FreeBSD 11.x 分支的支持),并且至少需要 FreeBSD 12.2 才能工作。

来源: opennet.ru

添加评论