美国当地时间8月24日,Go 开发团队宣布推出 Go 1.11 正式版。
下载地址 >>> https://golang.org/dl/ or https://golang.google.cn/dl/(免梯子)
看看有哪些值得关注的更新 ——
新版本在工具链、运行时和库都有许多变化和改进。当然,兼容性方面依然会兼容旧版本。此外有两个最值得关注且激动人心的新特性 —— 对模块(modules)和 WebAssembly 的支持。
Go Modules
此版本增加了对被称作“模块(Go Modules)”的初步支持,这是 GOPATH 的替代方案,集成了对版本控制和软件包分发的支持。该功能目前仍处于实验性阶段,并且仍有一些可能会影响使用的问题,因此请随意使用问题跟踪器进行反馈或查阅解决方案。
WebAssembly
Go 1.11 还为 WebAssembly (js/wasm) 添加了一个处于实验性阶段的端口。它使得开发者可将 Go 程序编译为与四个主流 Web 浏览器兼容的二进制格式。可以在 webassembly.org 上阅读有关 WebAssembly(缩写为"WASM")的更多信息。
Go 程序现在可被编译为一个 WebAssembly 模块,该模块包括用于 goroutine 调度、垃圾收集、映射等的 Go 运行时。因此,生成的模块大小约为 2MB,或压缩后为 500KB 左右。Go 程序也可以使用新的实验性 [syscall/js](https://link.zhihu.com/?target=https%3A//golang.org/pkg/syscall/js/)
包调用 JavaScript。有关二进制包大小和与其他语言互操作的问题尚未成为优先处理事项,不过会在将来的版本中得到解决。
下面和大家分享如何在Go语言中使用WebAssembly。先安装好Go1.11+版本的Go语言环境。然后创建hello.go文件:
package main
import "fmt"
func main() {
fmt.Println("你好,WebAssembly!")
}
为了不了解Go语言的同学便于理解,让我们简单介绍一下程序。第一句表示当前的包名字为main,同时包中有一个main函数,而main包的main函数就是Go语言程序的入口。在main函数中通过导入的fmt包内的Println方法输出了一个字符串。然后在命令行中直接输入go run hello.go来运行程序。如果一切正常的话。应该可以在命令行看到输出"你好,WebAssembly!"的结果。
Go1.11开始支持WebAssembly,对应的操作系统名为js,对应的CPU类型为wasm。目前还无法通过go run的方式直接运行输出的wasm文件,因此我们需要通过go build的方式生成wasm目标文件,然后通过Node环境执行。需要注意的是更新的Node版本对wasm的支持会更好,作者推进使用v10以上的版本。
通过以下命令将hello.go编译为a.out.wasm:
$ GOARCH=wasm GOOS=js go build -o a.out.wasm hello.go
生成的a.out.wasm文件体积可能超过2MB大小。而且生成等a.out.wasm还无法直接运行,需要初始化Go语言必须的运行时环境。
对运行时初始化是一个相对复杂的工作,因此Go语言提供了一个(GOROOT)/misc/wasm/go_js_wasm_exec脚本文件,用于执行Go语言生成的wasm文件。
参考go_js_wasm_exec脚本的实现,我们可以直接使用wasm_exec.js来运行wasm模块。我们可以先将wasm_exec.js文件复制到当前目录,然后通过以下命令运行wasm模块:
$ node wasm_exec.js a.out.wasm
你好,WebAssembly
现在终于可以正常运行Go语言生成wasm程序了。因此以后可以使用Go语言来开发Web应用了。
有关 Go 1.11 中变更的更多详细信息,请参阅发行说明 >>> https://golang.org/doc/go1.11
接下来,Go语言带给开发者们的惊喜会越来越多,不知您是否对这么语言感兴趣呢?下面推荐我们CSDN学院上的Go语言视频教程:
2.Go语言-基础篇
3.Go语言-进阶篇