Go 1.11 添加实验性的 WebAssembly、模块等特性

阅读数:455 2018 年 9 月 4 日

Go 1.11 的两个主要特性是 WebAssembly 模块,不过这两个特性依然处于实验性阶段。

模块为GOPATH提供了替代方案,用来为项目定位依赖和管理版本化。如果go命令在$GOPATH/src之外的目录中运行,并且该目录中有一个模块的话,那么模块功能就会启用,否则go将会使用GOPATH。Google 的 Russ Cox 这样说到

Go 模块是包的一个集合,它们共享通用的导入路径前缀,也就是所谓的模块路径。模块是进行版本化的单元,模块版本是通过语义化(semantic)版本字符串进行定义的。在使用 Git 进行开发的时候,开发人员通过为模块的 Git 仓库添加标签来定义新的语义化版本。尽管强烈推荐使用语义化的版本,但是依然支持引用特定的提交。

模块是通过go mod创建的,位于模块根目录下的go.mod文件对其进行了定义,该文件列出了所有需要的包及其版本号。例如,下面是一个简单的模块定义,它声明了模块的基础路径以及两个依赖,该模块是通过go mod -init -module example.com/m创建的:

复制代码
module example.com/m
require (
golang.org/x/text v0.3.0
gopkg.in/yaml.v2 v2.1.0
)

存在go.mod文件之后,像go buildgo testgo list这样的命令将会自动添加新的依赖以满足导入的要求。例如,在你的主包中导入rsc.io/quote,然后执行go run将会添加require rsc.io/quote v1.5.2go.mod中。类似的,go get命令会更新go.mod,以便于修改构建中所使用的模块版本,它可能会升级或降级级联依赖。

关于模块语法的更多细节可以通过go help modules来查阅。至少在 Go 1.12 之前,这个特性都将会处于实验性阶段,Go 团队会努力保持兼容性。一旦模块稳定之后,对 GOPATH 的支持将会被移除掉。

支持 WebAssembly 的目标在于让 Go 程序能够在 Web 浏览器中运行。我们可以编译 Go 程序使其能够在 Web 中运行:GOARCH=wasm GOOS=js go build -o test.wasm main.go。这将会生成三个文件:wasm_exec.htmlwasm_exec.jstest.wasm,我们可以将其部署到 HTTP 服务器中或者在浏览器中加载路径。 js 包可以用来进行 DOM 操作。 

要了解 Go 1.11 的完整变更,请查阅官方发布说明,通过该网址可以进行下载。

查看英文原文: Go 1.11 Adds WebAssembly, Experimental Module Support, and More

收藏

评论

微博

发表评论

注册/登录 InfoQ 发表评论