Go WASM导出函数



我想创建一个.wasm文件,该文件在编译时仍具有导出的函数名。

package main
import (
"fmt"
)
func main() {
fmt.Println("Main")
}
func MyFunc() {
fmt.Println("MyFunc")
}

我正在使用进行构建

GOOS=js GOARCH=wasm go build -o main.wasm

它产生了wasm文件(Go以wasm为目标,这真是太棒了(。

但是使用wabt并进行对象转储会暴露这些函数。

Export[4]:
- func[958] <wasm_export_run> -> "run"
- func[959] <wasm_export_resume> -> "resume"
- func[961] <wasm_export_getsp> -> "getsp"
- memory[0] -> "mem"

我期待看到类似的东西

func[137] <MyFunc> -> "MyFunc"

有人知道如何在Go WASM中导出函数吗?

在包含#[no_mangle]pub extern "C"的rust中,使用wasm包在输出中保持函数可用。我正在寻找与Go类似的东西。

如果您计划在Go中编写大量WASM,您可能需要考虑使用TinyGo进行编译,TinyGo是一个用于嵌入式和WASM的Go编译器。

TinyGo支持//export <name>或别名//go:export <name>注释指令,用于执行您要查找的操作。

我正在复制粘贴TinyGoWASM文档中的第一个示例:

package main
// This calls a JS function from Go.
func main() {
println("adding two numbers:", add(2, 3)) // expecting 5
}
// ...omitted
// This function is exported to JavaScript, so can be called using
// exports.multiply() in JavaScript.
//export multiply
func multiply(x, y int) int {
return x * y;
}

你用tinygo build -o wasm.wasm -target wasm ./main.go构建它。


标准Go编译器正在就复制TinyGo功能进行公开讨论。tl;dr似乎可以通过将函数设置为JS全局命名空间来实现这一点,使用js.Global().Set(...)

相关内容

  • 没有找到相关文章

最新更新