如何将golang编译的WASM函数导入到js中并使用?

问题描述 投票:0回答:1

我正在尝试从我的 golang WASM 文件导入一个函数以在 javascript 中使用,但每当我尝试使用该函数时,我都会收到未定义的错误。但如果我导入 WASM 文件,然后使用控制台,我可以手动调用该函数。我需要能够在js程序中调用它。谢谢!

浏览器控制台错误

Uncaught ReferenceError: add is not defined

JS

    async function init() {
        const go = new Go();
        const result = await WebAssembly.instantiateStreaming(
          fetch("main.wasm"),
          go.importObject
        );
        go.run(result.instance);
    }

    add("Hello")

    init();

戈兰

package main

import (
    "fmt"
    "syscall/js"
)

func add(this js.Value, inputs []js.Value) interface{} {
    var input string = inputs[0].String()

    return "you typed: " + input
}

func main() {
    fmt.Println("hi")
    js.Global().Set("add", js.FuncOf(add))

    <-make(chan bool)
}

javascript go webassembly go-wasm
1个回答
0
投票

我想出了一个解决方案,IDK,如果它是最有效的,但我绝对有效。如果您只是创建另一个函数并在其中使用 WASM 函数,但在 init 函数中的所有内容之后立即调用它,它将起作用。

    function alt() {
    var h = add("Hello World")
    console.log(h)
}

async function init() {
    const go = new Go();
    const result = await WebAssembly.instantiateStreaming(
    fetch("main.wasm"), go.importObject);
    
    var wasmModule = result.instance;
    go.run(wasmModule);
    console.log(wasmModule.exports)
    alt()
}

init();
© www.soinside.com 2019 - 2024. All rights reserved.