28

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

 5 years ago
source link: http://www.infoq.com/cn/news/2018/09/golang-1.11-modules-we?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK