Go 编程语言 1.16 发布

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

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

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

Go 1.16 中引入的主要新功能:

  • 添加了 embed 包,它提供了用于将任意文件和目录嵌入到程序中的工具。 提供了新的“//go:embed”指令来指定要在编译时嵌入的文件。 例如,在代码注释中指定“//go:embed test.txt”,然后声明变量“var f embed.FS”,将导致嵌入 test.txt 文件并可以通过“ f”描述符。 类似的方式,你可以在文件中嵌入工作所需的某种类型的资源或单个值,例如要从version.txt文件中获取字符串变量“s”,可以指定: import _ "embed ” //go:embed version.txt var s string print (s)
  • 默认情况下,现在需要具有集成版本控制支持的新模块系统,取代基于 GOPATH 的依赖关系管理。 GO111MODULE 环境变量现在默认设置为“on”,并且无论工作目录或父目录中是否存在 go.mod 文件,都会使用模块模式。 在新模式下,“go build”和“go test”等构建命令不会更改 go.mod 和 go.sum 的内容,“go install”命令会处理版本参数(“go install example.com/[电子邮件保护]”)。 要返回旧行为,请将 GO111MODULE 更改为“auto”。 值得注意的是,96%的开发者已经转向新的模块系统。
  • 链接器已被优化。 对于大型项目,布局速度现在提高了 20-25%,所需内存减少了 5-15%。
  • 编译器添加了对带有“for”循环、方法值和“类型开关”结构的缩写定义的函数内联扩展的支持。
  • 添加了对配备新 Apple M1 ARM 芯片的 Apple 系统的支持。 添加了 netbsd/arm64 和 openbsd/mips64 端口,支持 64 位 ARM 上的 NetBSD 和 MIPS64 系统上的 OpenBSD。 向 linux/riscv64 端口添加了对 cgo 和“-buildmode=pie”模式的支持。
  • 对 x87 编译模式的支持已停止 (GO386=387)。 现在可通过“GO2=softfloat”软件模式提供对 SSE386 无指令处理器的支持。

此外,我们可以注意到 Dart 2.12 语言的 beta 版本已经开始测试,其中使用“Null”值(空安全)的安全模式已经稳定,这将有助于避免因尝试使用其变量而导致的崩溃。值未定义并设置为“Null”。 该模式意味着变量不能有 null 值,除非显式地为它们分配了 null 值。 该模式严格遵守变量类型,这允许编译器应用额外的优化。 在编译时检查类型合规性,例如,如果尝试将值“Null”分配给类型不暗示未定义状态的变量(例如“int”),则会显示错误。

来源: opennet.ru

添加评论