偶尔看到golang能够直接编译成webassembly,尝试了把,参照:
golang是版本1.11试验性的支持了,1.12版本做了点改善,1.13 版本有做了点改善,这边实验的环境是”go version go1.13.4 linux/amd64″
编写golang代码和编译
golang的代码,就是个通常看到的”hello world”
package main
import "fmt"
func main() {
fmt.Println("Hello, WebAssembly!")
}
编译golang 代码
GOOS=js GOARCH=wasm go build -o main.wasm
构建运行环境
本地浏览器并不是能直接执行这个文件,需要构建下运行环境
拷贝WebAssembly的执行javascript文件
偶尔cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" .
添加index. html 用于执行javascript
<html>
<head>
<meta charset="utf-8"/>
<script src="wasm_exec.js"></script>
<script>
const go = new Go();
WebAssembly.instantiateStreaming(fetch("main.wasm"), go.importObject).then((result) => {
go.run(result.instance);
});
</script>
</head>
<body></body>
</html>
目录下文件列表如下
.
├── index.html
├── main.go
├── main.wasm
└── wasm_exec.js
运行web 服务
运行一个 web服务 器
# install goexec:
go get -u github.com/shurcooL/goexec
# start http service
goexec 'http.ListenAndServe(`:8080`, http.FileServer(http.Dir(`.`)))'
网页访问ip:8080
网页上是什么也没有了,你需要打开开发者模式,在console里面才能看到Hello, WebAssembly!