【问题标题】:Golang's syscall/js js.NewCallback is undefinedGolang 的 syscall/js js.NewCallback 未定义
【发布时间】:2019-09-11 23:40:39
【问题描述】:

我对 go 和 wasm 都是新手,看起来这些项目进展很快。 I was reading an introduction to using wasm in go 好像是一月份写的,但是已经过时了。

我试图在调用 JavaScript 函数时调用单个 go 函数。该示例说要执行以下操作:

 js.Global().Set("jsFunctionName", js.NewCallback(goCallback))

虽然当我试图编译这个时,我得到了这个错误:

./webassembly.go:54:35: undefined: js.NewCallback

I checked the documentation 并且看不到对NewCallback 的引用。目前应该这样做的“正确”方式是什么?

【问题讨论】:

  • 您是否导入了syscall/js 并设置了正确的环境变量(GOOS=js GOARCH=wasm)?
  • 您所指的文章似乎已过时。您可能想结帐the wiki。如果我不得不猜测,您可能想要js.FuncOf 而不是js.NewCallback
  • @Gavin 感谢您的推荐!看起来 js.FuncOf 是我正在寻找的。一旦我对其进行测试并确保它符合我的要求,我就会用对我有用的解决方案来回答这个问题。再次感谢您!

标签: javascript go webassembly


【解决方案1】:
js.Global().Set("jsFunctionName", js.NewCallback(goCallback))

应该是:

js.Global().Set("jsFunctionName", js.FuncOf(goCallback))

注意 goCallback 的签名已经改变,现在从 Go 1.12 开始,支持返回值。 例如,下面是如何公开一个简单的 add 函数:

// function definition
func add(this js.Value, i []js.Value) interface{} {
  return js.ValueOf(i[0].Int()+i[1].Int())
}

// exposing to JS
js.Global().Set("add", js.FuncOf(add))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 2016-10-23
    • 2019-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多