首页 > 解决方案 > Golang 的 syscall/js js.NewCallback 未定义

问题描述

我对 go 和 wasm 都是新手,看起来这些项目进展很快。我正在阅读在 go 中使用 wasm 的介绍,看起来虽然它是在一月份写的,但它已经过时了。

我试图在调用 JavaScript 函数时调用单个 go 函数。该示例说要做这样的事情:

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

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

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

我检查了文档,没有看到对NewCallback. 目前应该这样做的“正确”方式是什么?

标签: javascriptgowebassembly

解决方案


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))

推荐阅读