Golang生成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
|
package main
import (
"syscall/js"
)
// 导出add函数
func add(this js.Value, inputs []js.Value) interface{} {
a := inputs[0].Int()
b := inputs[1].Int()
return a + b
}
// 导出add函数
func mul(this js.Value, inputs []js.Value) interface{} {
a := inputs[0].Int()
b := inputs[1].Int()
return a * b
}
func main() {
c := make(chan struct{}, 0)
// 注册add函数
js.Global().Set("add", js.FuncOf(add))
js.Global().Set("mul", js.FuncOf(mul))
<-c
}
|
使用下面的命令编译并打包成wasm。注意golang需要版本>11
1
2
3
|
set GOOS=js
set GOARCH=wasm
go build -o main.wasm main.go
|
在html中引入js
1
2
3
|
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline' 'unsafe-eval'">
<script src="wasm_exec.js"></script>
<script src="index.js"></script>
|
然后就是index.js中的调用了
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
31
32
33
34
35
|
const go = new Go();
WebAssembly.instantiateStreaming(fetch("app/main.wasm"), go.importObject)
.then((result) => {
go.run(result.instance);
// 调用导出函数
const sum = add(2, 3);
console.log(`The sum of 2 and 3 is ${sum}.`);
const ji = mul(2, 3);
console.log(`The mul of 2 and 3 is ${ji}.`);
})
.catch((err) => {
console.error(err);
});
// 导入参数对象
const imports = {
env: {
log: function (str) {
console.log(str);
},
},
};
// 注册导出函数
function add(x, y) {
return window.wasmAdd(x, y);
}
// 注册导出函数
function mul(x, y) {
return window.wasmMul(x, y);
}
|