我使用以下命令将 Golang 代码编译为 wasm
GOOS=js GOARCH=wasm go build -o main.wasm
Run Code Online (Sandbox Code Playgroud)
尝试使用 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
Run Code Online (Sandbox Code Playgroud)
当使用 wasm3 执行时,我得到
wasm3 main.wasm
Error: function lookup failed ('_start')
Run Code Online (Sandbox Code Playgroud)
这些错误意味着什么以及如何修复它们?
目前还没有办法在浏览器之外使用 go 编译器生成 wasm。您的示例main.wasm
中的 旨在与垫片一起使用wasm_exec.js
。不过,有多种方法可以在 Node 中使用它。这是我之前关于同一主题的回答。所以,你的选择是:
node wasm_exec.js main.wasm
Run Code Online (Sandbox Code Playgroud)
tinygo build -target=wasi -o main.wasm main.go
Run Code Online (Sandbox Code Playgroud)
wasmtime
应该可以正常运行。
GOOS=wasip1 GOARCH=wasm go build -o main.wasm
Run Code Online (Sandbox Code Playgroud)
没有其他变化。
对于您的问题,我会说选择(1),以便至少有一些工作,以及(2)如果您想使用wasmtime
. 如果您想等待而不自行编译,那么新的 go 版本也应该很快就会发布。
编辑:
我有时间自己研究一下。看来选项 3 自己做并不难:
我按照此处的说明从源获取最新go
版本,这些源只是:
node wasm_exec.js main.wasm
Run Code Online (Sandbox Code Playgroud)
您必须go
已经安装,才能进行引导,但任何最新版本都可以。遵循这些说明后,您可以gotip
像使用一样go
。所以你的命令变成:
tinygo build -target=wasi -o main.wasm main.go
Run Code Online (Sandbox Code Playgroud)
作为wasmtime
支持wasi
,您应该能够运行您的程序,而无需对命令进行任何其他修改。
编译gotip
也不应该花费太多,只要你有一台足够强大的计算机。