登录
首页 >  Golang >  Go问答

如何在 Wasm 中调用 JavaScript 外部函数?

来源:stackoverflow

时间:2024-03-15 10:45:27 336浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《如何在 Wasm 中调用 JavaScript 外部函数?》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

我正在尝试从 wasm 调用 javascript 函数。

package main

import (
    "syscall/js"
)

func main(){
   var args []js.value
   // set args here...
   js.global().get("document").call("function", "myfunction").set("args", args)
}

然后在 html 中我将包含我的 javascript

其中 js/script.js 包含:

function myfunction(args){
   console.log(args);
}

如何从 wasm 代码调用 myfunction?

我尝试了建议的解决方案,但它给了我一个语法错误。

args := js.valueof([]interface{"foo", 42})
v := js.global().call("myfunction", args)
fmt.println(v)

终端看起来像

$ GOOS=js GOARCH=wasm go build -o ./ipickd.wasm ./wasm.go
# command-line-arguments
./wasm.go:44:33: syntax error: unexpected literal "foo", expecting method or interface name

解决方案


您有一些错误:

  • 该函数的范围是 global()
  • set 用于设置 js.value 的属性,如 docs 中所述,此处不需要
  • call 根据 docs 将函数名称和参数作为参数
  • 如果您想传递数组,[]js.value 可能不会执行您想要的操作

你的 go 代码应该是:

args := js.valueof([]interface{}{"foo", 42})
js.global().call("myfunction", args)

或者使用单行代码,让 call 进行转换:

js.Global().Call("myFunction", []interface{}{"foo", "42"})

您可以参考js.ValueOf文档了解类型兼容性。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《如何在 Wasm 中调用 JavaScript 外部函数?》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>