Go言語でWebAssemblyを吐き出して、Go言語で書いた関数をJavaScriptで使う例
以下の例ではGoで書いた関数をコールバックとして呼び出している。
code:index.html
<html>
<head>
<meta charset="utf-8">
<script src="wasm_exec.js"></script>
<script>
const go = new Go();
WebAssembly.instantiateStreaming(fetch("test.wasm"), go.importObject).then((result) => {
go.run(result.instance);
goStrLength("my string", function(strLen){
console.log("strLen:", strLen);
console.log("typeof strLen:", typeof strLen);
});
});
</script>
</head>
<body>
Please see console log.
</body>
</html>
code:main.go
package main
import "fmt"
import "syscall/js"
func main() {
fmt.Println("Hello, wasm!")
js.Global().Set("goStrLength", js.FuncOf(func(this js.Value, args []js.Value) interface{} {
// Get first argument as string
strLen := len(str)
return nil
}))
done := make(chan struct{}, 0)
<-done
}
code:server.go
package main
import (
"flag"
"log"
"net/http"
)
func main() {
addr := flag.String("a", ":5555", "address:port")
flag.Parse()
log.Printf("listening on %q\n", *addr)
log.Fatal(http.ListenAndServe(*addr, http.FileServer(http.Dir("."))))
}
以下のコマンドで、WebAssemblyのビルドと
サーバーの実行(Webサーバーはpython3 -m http.server的なやつでもOK)
code:bash
GOOS=js GOARCH=wasm go build -o test.wasm main.go && go run server.go
参考