Go WASM 导出函数
Go WASM export functions
我想创建一个 .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-pack 使函数在输出中可用。我正在寻找与 Go 类似的东西。
如果您打算在 Go 中编写大量 WASM,您可能需要考虑使用 TinyGo 进行编译,这是一个用于嵌入式和 WASM 的 Go 编译器。
TinyGo 支持 //export <name>
或别名 //go:export <name>
注释指令来满足您的需求。
我正在复制粘贴 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 似乎是您可以通过使用 js.Global().Set(...)
将 funcs 设置为 JS 全局命名空间来实现此目的
我想创建一个 .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-pack 使函数在输出中可用。我正在寻找与 Go 类似的东西。
如果您打算在 Go 中编写大量 WASM,您可能需要考虑使用 TinyGo 进行编译,这是一个用于嵌入式和 WASM 的 Go 编译器。
TinyGo 支持 //export <name>
或别名 //go:export <name>
注释指令来满足您的需求。
我正在复制粘贴 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 似乎是您可以通过使用 js.Global().Set(...)