我正在使用tinygo为简单函数生成wasm:

//export onInput
func onInput() map[string]interface{} {
    return map[string]interface{}{
        "key": 60,
        "remove": 1,
    }
}

然后,我使用wasm target使用tinygo进行构建,如下所示:

tinygo build -o main.wasm -target wasm ./main.go

当我调用方法wasm.exports.onInput()时,我得到一个数字,比如:102752

如何获取JS对象作为返回值,如:

{ key: 60, remove: 1 }

// Or array [60, 1] if possible

Note:

tinygo文档中说:

WebAssembly目标不会直接返回JavaScript无法处理的变量(请参见上文关于i64的内容,以及struct、i64、多个返回值等).相反,它们存储在作为调用者的第一个参数传递的指针中.

如果这是问题的原因,那么如何将返回值作为javascript的指针传递?

Edit

我不知道如何从go函数返回任何数组、字符串或映射.我愿意接受以上任何一种.

推荐答案

根据tinygo github的example,您可以try 以下内容:

package main

import "syscall/js"

func main() {
    wait := make(chan struct{}, 0)
    js.Global().Set("onInput", js.FuncOf(onInput))
    <-wait
}

// note that there is no export as we registered this function in global
func onInput(this js.Value, args []js.Value) interface{} {
    return js.ValueOf(map[string]interface{}{
        "key":    60,
        "remove": 1,
    })
}

在js代码中只使用onInput,没有wasmModule.instance.exports前缀

Go相关问答推荐

Go 1.22 net/http群组路由

golang 的条件储存库

如何在v2 Go SDK中使用KeyConditionExpression查询AWS DynamoDb?

我找不到pcap.Openlive的设备名称

如何解析Go-Gin多部分请求中的 struct 切片

Go 中的 YAML 自定义标签

用于提取 <*n 的正则表达式(其中 n 是一个数字)

对 CSV 进行单元测试失败

如何使用管理员权限启动 powershell 进程并重定向标准输入 (os.exec)

闭包所处的环境范围是什么?

致命错误 - 所有 Goroutines 都睡着了!僵局

也许在 golang 中包(字符串和字符串类型不匹配)

具有嵌套重复的正则表达式

在 Go 中公开公共 JWK

如何在切片增长时自动将切片的新元素添加到函数参数

如何使用 Status 字段创建 Kubernetes 对象?

如何在没有内存分配的情况下压缩和发布文件

Ginkgo/Gomega panic 测试失败

使用 Go 读取 TOML 文件时结果为空

如何使用golang操作很长的字符串以避免内存不足