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
创建的:
<pre data-anchor-id="6kyg">
module example.com/m require ( golang.org/x/text v0.3.0 gopkg.in/yaml.v2 v2.1.0 )
存在go.mod
文件之后,像go build
、go test
和go list
这样的命令将会自动添加新的依赖以满足导入的要求。例如,在你的主包中导入rsc.io/quote
,然后执行go run
将会添加require rsc.io/quote v1.5.2
到go.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.html
、wasm_exec.js
和test.wasm
,我们可以将其部署到 HTTP 服务器中或者在浏览器中加载路径。 js 包可以用来进行 DOM 操作。
要了解 Go 1.11 的完整变更,请查阅官方发布说明,通过该网址可以进行下载。
查看英文原文: Go 1.11 Adds WebAssembly, Experimental Module Support, and More
评论