gpt4 book ai didi

Go WASM 导出功能

转载 作者:行者123 更新时间:2023-12-04 13:26:45 66 4
gpt4 key购买 nike

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

package main

import (
"fmt"
)

func main() {
fmt.Println("Main")
}

func MyFunc() {
fmt.Println("MyFunc")
}

我正在 build
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" 使用 wasm-pack 保持该功能在输出中可用。我正在寻找与 Go 类似的东西。

最佳答案

如果您打算在 Go 中编写大量 WASM,您可能需要考虑使用 TinyGo 进行编译。 ,这是一个用于嵌入式和 WASM 的 Go 编译器。
TinyGo 支持 //export <name>或别名 //go:export <name> comment 指令可以满足您的需求。
我正在复制粘贴 TinyGo 的第一个示例 WASM docs :

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 编译器有一个 ongoing open discussion关于复制 TinyGo 功能。 tl; dr 似乎是您可以通过将 funcs 设置为 JS 全局命名空间来实现这一点,使用 js.Global().Set(...)

关于Go WASM 导出功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67978442/

66 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com