将go
语言函数编译为webassembly
供js
调用
package main
import (
_ "embed"
"errors"
"fmt"
)
func add(args []float64) any {
if len(args) == 0 {
return errors.New("参数不能为空!")
}
return args[0] + args[1]
}
func main() {
fmt.Println(add([]float64{1, 2}))
}
// 1.新增编译头文件(固定写法)
//go:build js && wasm
// +build js,wasm
package main
import (
"errors"
// 2.引入go webassembly编译库
"syscall/js"
)
// 3.改造go函数
func add(this js.Value, args []js.Value) any {
if len(args) == 0 {
return errors.New("参数不能为空!")
}
x := args[0].Float()
y := args[1].Float()
return x+y
}
// 4.挂载全局变量,并且挂起
func main() {
js.Global().Set("add", js.FuncOf(add))
// 阻塞挂起
<-make(chan any)
}
GOOS=js GOARCH=wasm go build -o test.wasm test/main.go
执行上述命令之后,在当前目录下会生成test.wasm
代码,并且会在go
安装目录下的misc/wasm
文件夹生成wasm_exec.html
和wasm_exec.js
等代码。
enjoy:)