我使用将 golang 代码编译为 wasm
goos=js goarch=wasm go build -o main.wasm
尝试使用 wasmtime 执行时出现以下错误
wasmtime main.wasm error: failed to run main module `main.wasm` caused by: 0: failed to instantiate "main.wasm" 1: unknown import: `go::debug` has not been defined
当使用 wasm3 执行时,我得到
wasm3 main.wasm Error: function lookup failed ('_start')
这些错误意味着什么以及如何修复它们?
目前无法在浏览器之外使用 go 编译器生成 wasm。您的示例中的 main.wasm
旨在与 wasm_exec.js
填充程序一起使用。不过,有多种方法可以在 node 中使用它。 这是我之前关于同一主题的回答。因此,您的选择是:
node wasm_exec.js main.wasm
tinygo build -target=wasi -o main.wasm main.go
wasmtime
应该可以正常运行。
goos=wasip1 goarch=wasm go build -o main.wasm
没有其他变化。
对于你的问题,我会说使用(1),以便至少有一些工作,以及(2)如果你想使用 wasmtime
独立运行它。如果您想等待而不自行编译,那么新的 go 版本也应该很快就会发布。
编辑:
我有时间自己研究一下。看起来选项 3 自己做并不难:
我按照此处的说明获取从源代码构建的最新 go
,这只是:
go install golang.org/dl/gotip@latest gotip download
您必须已经安装 go
才能进行引导,但任何最新版本都可以。完成这些说明后,您可以像 go
一样使用 gotip
。所以你的命令变成:
GOOS=wasip1 GOARCH=wasm gotip build -o main.wasm
由于 wasmtime
支持 wasi
,因此您应该能够运行您的程序,而无需对命令进行任何其他修改。
gotip
的编译也不应该花费太多时间,只要你有足够强大的计算机即可。