Wasm
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package main

import (
	"syscall/js"
)

// list function
func list() string {
	// Your code here
	return "List Result"
}

// status function
func status() string {
	// Your code here
	return "Status Result"
}

func main() {
	js.Global().Set("list", js.FuncOf(func(this js.Value, args []js.Value) interface{} {
		return list()
	}))

	js.Global().Set("envStatus", js.FuncOf(func(this js.Value, args []js.Value) interface{} {
		return status()
	}))

	// Wait for the callbacks to be called
	select {}
}

用powershell编译

1
$env:GOOS="js"; $env:GOARCH="wasm"; go build -o main.wasm main.go

用shell编译

1
GOOS=js GOARCH=wasm go build -o main.wasm main.go
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<script src="src/lib/wasm_exec.js"></script>
<script>
    const go = new Go(); // Defined in wasm_exec.js
    WebAssembly.instantiateStreaming(fetch('src/lib/main2.wasm'), go.importObject).then((result) => {
        go.run(result.instance);

        console.log(window.list());
        console.log(window.envStatus());
    });
</script>

wasm_exec.js是Go语言工具链自带的一个文件,它提供了Go编译的WebAssembly模块与JavaScript环境之间的桥梁。当在Go中使用syscall/js包时,wasm_exec.js提供了必要的函数和方法来处理JavaScript的回调和其他交互。

wasm_exec.js文件通常位于Go的安装目录下的misc/wasm文件夹中。你可以在命令行中使用以下命令来找到并复制这个文件到你的项目目录中:

cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" .