Don*_*ton 5 arrays go slice webassembly
有一个gocode,编译成wasm文件。我希望其中一个函数返回一个数组,但是当我这样做时,我看到一个panic: ValueOf: invalid value错误。js.ValueOf函数似乎能够处理数组:
...
case []interface{}:
a := arrayConstructor.New(len(x))
for i, s := range x {
a.SetIndex(i, s)
}
return a
...
Run Code Online (Sandbox Code Playgroud)
但当我给它一个值时仍然会恐慌[]int。
package main
import (
"fmt"
"syscall/js"
)
var signal = make(chan int)
func keepAlive() {
for {
<-signal
}
}
func main() {
js.Global().Set("PanicStation", js.FuncOf(PanicStation))
keepAlive()
}
func PanicStation(this js.Value, args []js.Value) interface{} {
arr := make([]int, 1)
return arr
}
Run Code Online (Sandbox Code Playgroud)
[]interface{}[]int不等于[]interface{}. 如果[]interface{}适合您,请创建并返回:
arr := make([]interface{}, 1)\nRun Code Online (Sandbox Code Playgroud)\n\n例如,如果您返回此切片:
\n\nfunc PanicStation(this js.Value, args []js.Value) interface{} {\n return []interface{}{1, "two"}\n}\nRun Code Online (Sandbox Code Playgroud)\n\n跑步PanicStation()在 JavaScript 控制台中
> PanicStation()\n> (2)\xc2\xa0[1, "two"]\nRun Code Online (Sandbox Code Playgroud)\n\n详细说明js.ValueOf()支持哪些类型以及如何转换它们的文档:
| Go | JavaScript |\n| ---------------------- | ---------------------- |\n| js.Value | [its value] |\n| js.TypedArray | typed array |\n| js.Func | function |\n| nil | null |\n| bool | boolean |\n| integers and floats | number |\n| string | string |\n| []interface{} | new array |\n| map[string]interface{} | new object |\nRun Code Online (Sandbox Code Playgroud)\n\n请注意,在 JavaScript 中可以返回一个类型化数组的值。为此,请js.TypedArray在 Go 中使用(通过 获得js.TypedArrayOf())。支持的类型有:
\n\n\n支持的类型有 []int8、[]int16、[]int32、[]uint8、[]uint16、[]uint32、[]float32 和 []float64。传递不受支持的值会导致恐慌。
\n
这是如何执行此操作的示例:
\n\nfunc PanicStation(this js.Value, args []js.Value) interface{} {\n return js.TypedArrayOf([]int32{1, 2})\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这次PanicStation()从 JavaScript 调用,输出将是:
> PanicStation()\n> Int32Array(2)\xc2\xa0[1, 2]\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2046 次 |
| 最近记录: |