嗨,我想做一个编译一个GO文件介绍WASM和运行在从节点服务器。
在index.html
中,我有:
<script src="./path_to/wasm_exec.js" ></script>
<script>
const go = new Go();
WebAssembly.instantiateStreaming(fetch("./path_to/file.wasm"), go.importObject).then((result) => {
go.run(result.instance);
console.log(result);
console.log(go);
});
我编译成WASM的GO文件如下所示:
package main
import (
"fmt"
)
//export FuncName
func FuncName(M int, durations []int) int {
fmt.Println("[GO] Log file.go", M, durations)
return 10
}
func main() {
fmt.Println("HELLO GO")
}
我现在编译的是这样的:
GOOS=js GOARCH=wasm go build -o path_to/file.wasm path_to/file.go
我想在Go文件外部和html内部使用函数FuncName,但我可以导出它。
我试着这样使用tinygo:`tinygo build -o path_to/file.wasm path_to/file.go``但它不工作neather
1条答案
按热度按时间oyxsuwqo1#
纯粹的Go方式是使用
syscall/js
包将函数挂载到JavaScript全局对象(通常是window
或global
)上:为了使导出的函数在页面上始终可用,Go程序不应该退出。否则,当调用导出的函数时,您将得到以下JavaScript错误:
参见wasm: re-use //export mechanism for exporting identifiers within wasm modules和Go WASM export functions。
以下是更新后的演示(使用
GOOS=js GOARCH=wasm go build -o main.wasm
编译):main.go:
index.html: