首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Go WASM导出函数

Go WASM导出函数
EN

Stack Overflow用户
提问于 2021-06-15 00:03:00
回答 1查看 1.6K关注 0票数 6

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

代码语言:javascript
复制
package main

import (
    "fmt"
)

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

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

我在和

代码语言:javascript
复制
GOOS=js GOARCH=wasm go build -o main.wasm

它产生了wasm文件(而出色的目标是本地的)。

但是,使用瓦布特并执行对象转储会公开这些函数。

代码语言:javascript
复制
Export[4]:
 - func[958] <wasm_export_run> -> "run"
 - func[959] <wasm_export_resume> -> "resume"
 - func[961] <wasm_export_getsp> -> "getsp"
 - memory[0] -> "mem"

我希望看到这样的事情

代码语言:javascript
复制
func[137] <MyFunc> -> "MyFunc"

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

在铁锈中,包括#[no_mangle]pub extern "C"在内,在输出中保留了wasm的功能。我在找和Go类似的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-15 09:04:50

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

TinyGo支持一个//export <name>或别名//go:export <name>注释指令,该指令可以执行您想要的内容。

我正在复制粘贴TinyGo WASM文档的第一个示例

代码语言:javascript
复制
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.Global().Set(...)将函数设置为JS全局命名空间来实现这一点。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67978442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档