@levinzhang
2018-09-04T10:55:25.000000Z
字数 1189
阅读 566
by
Go 1.11的两个主要特性是WebAssembly和模块,不过这两个特性依然处于实验性阶段。
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 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