[关闭]
@levinzhang 2018-09-04T10:55:25.000000Z 字数 1189 阅读 553

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

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 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

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注