首页 >后端开发 >Golang >如何导出已编译的 Go WASM 文件中的函数名称?

如何导出已编译的 Go WASM 文件中的函数名称?

Patricia Arquette
Patricia Arquette原创
2024-10-31 03:28:02572浏览

How can I export function names in compiled Go WASM files?

在 Go WASM 中导出函数名称

您希望在已编译的 Go WASM 文件中导出函数名称。默认情况下,这些名称在生成的 .wasm 文件中不可见,因此很难从外部上下文调用它们。

TinyGo 的 //export 指令

TinyGo,专为嵌入式和 WASM 环境量身定制的 Go 编译器可为您的问题提供解决方案。它支持 //export 指令,该指令在编译期间保留函数名称。例如:

<code class="go">//export multiply
func multiply(x, y int) int {
    return x * y;
}</code>

该指令确保乘法函数在编译的 WASM 文件中仍然可以通过其名称进行访问。

标准 Go 编译器解决方案

对于标准 Go 编译器,关于添加类似功能的讨论正在进行中。不过,目前,您可以通过使用 js.Global().Set(...).

import (
    "syscall/js"
)

func main() {
    js.Global().Set("multiply", exportedMultiply)
}

//export multiply
func exportedMultiply(this js.Value, args []js.Value) interface{} {
    if len(args) != 2 {
        return "Invalid number of arguments"
    }
    x, y := int(args[0].Int()), int(args[1].Int())
    return x * y
}

将导出函数设置到 JS 全局命名空间来实现此目的。在本例中,multiply 导出到 JS全局范围,允许使用exports.multiply()从JavaScript调用它。

要构建Go WASM文件,请使用以下命令:

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

以上是如何导出已编译的 Go WASM 文件中的函数名称?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn