为了账号安全,请及时绑定邮箱和手机立即绑定

去 WASM 导出函数

去 WASM 导出函数

Go
MYYA 2022-09-05 17:29:39
我想创建一个文件,该文件在编译时仍然导出函数名称。.wasmpackage mainimport (    "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中导出函数?在生锈包括并保持功能在输出与 wasm-pack。我正在寻找与Go类似的东西。#[no_mangle]pub extern "C" 
查看完整描述

1 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

如果你打算用Go编写很多WASM,你可能需要考虑使用TinyGo进行编译,TinyGo是一个用于嵌入式和WASM的Go编译器。


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


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


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 似乎是,您可以通过将 funcs 设置为 JS 全局命名空间来实现此目的,并使用js.Global().Set(...)


查看完整回答
反对 回复 2022-09-05
  • 1 回答
  • 0 关注
  • 209 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号