快速教程:编写 Go 代码,运行 WASM!
在 Go 1.11 发布之前(该版本引入了对 WebAssembly (简称 WASM) 的实验性移植),我将演示如何将 Go 源代码编译成 WASM 并在浏览器中执行!
以下是步骤:
- 设置
go1.11beta3 - 编译转到 WASM
- 使用 HTML 和 JavaScript 加载 WASM
- 启动一个Web服务器
- 打开网站!
步骤 1:设置go1.11beta3
虽然我们需要 Go 1.11 版本(目前仍处于 beta 测试阶段,预计 8 月份发布!),但由于 Go 是开源的,我们可以直接下载最新的 beta 版本。
https://github.com/golang/go/releases/tag/go1.11beta3
$ go get golang.org/dl/go1.11beta3
$ go1.11beta3 download
# => Success. You may now run 'go1.11beta3'
步骤 2:编译 转到 WASM
我们现在可以编写 Go 代码了!计划是hello, Go/WASM!在浏览器中(在开发者控制台中)打印经典的 Go 代码。
// main.go
package main
import "fmt"
func main() {
fmt.Println("hello, Go/WASM!")
}
要将我们的 Go 程序编译成 WASM,我们使用命令go build。
注意:我们需要告诉 Go 为 Web 环境编译,而不是为默认环境(即我们的计算机)编译。因此,我们需要设置环境变量GOOS=js并将GOARCH=wasm目标环境设置为 Web。
$ GOOS=js GOARCH=wasm go1.11beta3 build -o test.wasm main.go
步骤 3:使用 HTML 和 JavaScript 加载 WASM
这一步并不难;Go 团队已经为我们准备了一些文件供我们进行实验。
# -s == silent mode
# -O == output mode
$ curl -sO https://raw.githubusercontent.com/golang/go/master/misc/wasm/wasm_exec.html
$ curl -sO https://raw.githubusercontent.com/golang/go/master/misc/wasm/wasm_exec.js
步骤 4:启动 Web 服务器
现在我们需要启动一个简单的 Web 服务器来提供一些静态资源。这只需要几行代码:
// server.go
package main
import (
"flag"
"log"
"net/http"
)
func main() {
port := flag.String("port", "8000", "port")
flag.Parse()
log.Fatal(http.ListenAndServe(":"+*port, http.FileServer(http.Dir("."))))
}
开始吧!干杯!
$ go1.11beta3 run server.go
# or to run on a different port:
# $ go1.11beta3 run -port=8080 server.go
第五步:打开网站!
打开localhost:8000/wasm_exec.html!
注意:在编译后的 WASM 加载之前,“运行”按钮(位于左上角)将显示为禁用状态。
启用“运行”按钮后,打开控制台并按下该按钮!
看hello, Go/WASM!??
恭喜!🎉
你刚刚通过 WASM 编译、加载并运行了一个 Go 程序!
是真的吗?
为什么不确认一下响应头里Content-Type是否包含了这个信息呢? ;)application/wasmtest.wasm