Go 1.11发布-WebAssembly和本机模块

这个星期五 Go 1.11 发布了 。 发布的关键内容是对WebAssembly的实验性支持,以及旨在成为代码分发标准的模块的新概念。

在继续介绍该发行版的主要内容之前,有必要对用户不太了解的更改说几句话。 与以前的版本一样,在Go 1.11中,已经进行了改进语言,工具链和运行时库的工作(例如,现在对最大Hip大小没有限制)。 当然,已经做了很多工作来提高语言的生产率(最重要的是-在数学上/在大型算法上)。

现在有关WebAssembly。 实际上,在Habré上已经有几篇有关如何在Go上编写Wasm代码的文章。 因此,该版本中的这一实验性功能根本不是新闻。 但是,我认为每个人都知道这很重要。 毕竟,如果计算机成功地将工具链以及Wasm最终确定为可投入生产的状态,则我们可以使用静态强类型化(您好,javascript!)以一种不错的语言编写前端代码。 这是使用技术的一个小例子-


顺便说一句,各种解决方案已经开始出现,以延长前端开发程序员的生活。 例如, https ://github.com/dave/wasmgo-编译转到WASM,并通过一个命令将其部署到CDN。

在我看来,现在让我们继续进行本版本中最重要的事情-模块系统。 关于这些模块的讨论已经很久了。 他们被全世界称为Vgo 。 甚至在RuNet- https: //habr.com/sandbox/115542/以及著名的Gopher- Alexey - https: //devzen.ru/episode-0180/的Devzen播客框架中都讨论了模块。 https://roberto.selbach.ca/intro-to-go-modules/很好地介绍了模块。

这些模块中最重要的是:

  • Semver上工作。 此外,使用go mod命令可以仅更新最大补丁程序版本(第三版本号)和任何最大次要版本号(第二或第三版本号)。 在破坏兼容性的主要版本上,您将不会以任何方式自动升级-这非常好。
  • 放弃GOPATH概念的过程已经开始 。 Go开发人员希望在2019年摆脱这种抽象,因此现在新模块仅在GOPATH外部有效。 但是,您可以设置环境变量GO111MODULE = on来消除此限制。
  • 离开供应商的过程已经开始。 到目前为止,新模块中有机会将依赖项放在单独的文件夹中,然后从那里使用它们。 但是,将来,Go开发人员希望摆脱这种情况。 他们认为,应该始终从存储库(例如,Github)获取依赖关系,或者公司应该通过在源侧缓存源代码(例如,使用Artifactory)来代理存储库。

重要的是要理解,新模块还是一个实验。 现代开发工具还没有为此做好准备。 因此,您可能必须继续与Dep一起生活。 但是,已经有尝试在公共CI上获取Vgo- https: //arslan.io/2018/08/26/using-go-modules-with-vendor-support-on-travis-ci/。

在GoLand中,新模块已经作为抽象存在。 但是,一切工作都相对较粗糙(例如,如果您使用Vgo下载模块,但不执行go get ,那么您的代码将不会开始被分析):

图片

总结一下。 Go 1.11是一个很棒的版本。 一切都没有发生(像往常一样)-这非常酷。 有趣的功能已经出现。 我们自动获得了一些性能提升。 总的来说,一切都应以现代语言进行工业发展。 更改将在即将进行的Go 2中进行,而Go 2正在积极讨论中。

Source: https://habr.com/ru/post/zh-CN421355/


All Articles