WebAssembly
hellow world
package main
import "fmt"
func main() {
fmt.Println("Hello, WebAssembly!")
}
WebAssemblyGOOS=jsGOARCH=wasm
设置方法有两种:
go env -w GOOS=js GOARCH=wasmcdGOOS=js GOARCH=wasm go build -o main.wasm
main.wasm.wasmhttpContent-Type
mainWebAssembly
main.wasm
index.html
<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>
main.wasmgo/misc/wasm/wasm_exec.jswasm_exec.js
wasmContent_typenginxapplication/wasm wasm;wasm
index.htmlconsoleHello, WebAssembly
测试
wasmbrowsertest
go get github.com/agnivade/wasmbrowsertest
GOOS=js GOARCH=wasm go test -exec="$GOPATH/bin/wasmbrowsertest"
与DOM交互
syscall/js
这个包还是实验性的,所以随时都有可能会有变更。
div
hello worldbodydiv
<div id="id1">test web assembly</div>
<div id="id2"></div>
<div id="id3"></div>
main.go
package main
import (
"fmt"
"syscall/js"
)
func main() {
fmt.Println("Hello, WebAssembly")
s := js.Global().Get("document").Call("getElementById", "id1").Get("innerHTML").String()
fmt.Println(s);
js.Global().Get("document").Call("getElementById", "id2").Set("innerHTML", "这里是go写入的文本")
js.Global().Get("document").Call("getElementById", "id3").Set("innerHTML", js.ValueOf("这里是go写入的文本2222"))
}
getset
调试
WebAssemblyprintln()console