如何通过syscall/js从JS向Go传递string[]类型数组?
解决Go WASM中接收JavaScript字符串数组的问题
Go的syscall/js包并没有提供直接将JS数组转为Go字符串切片的ArrayOfString()方法,你需要手动遍历JS数组来实现转换,以下是两种可行的实现方式:
方式一:直接返回JS数组长度(高效)
如果你的需求只是获取数组长度,不需要将数组内容转为Go切片,可以直接读取JS数组的length属性:
import "syscall/js" func WasmCount(this js.Value, args []js.Value) interface{} { jsArray := args[0] // 读取JS数组的length属性并转为int返回 return jsArray.Get("length").Int() }
方式二:转为Go字符串切片后处理
如果需要在Go中操作数组内的字符串内容,可以遍历JS数组元素并转为Go的string类型:
import "syscall/js" func WasmCount(this js.Value, args []js.Value) interface{} { jsArray := args[0] arrLength := jsArray.Get("length").Int() strSlice := make([]string, arrLength) // 遍历JS数组,逐个转换为Go字符串 for i := 0; i < arrLength; i++ { strSlice[i] = jsArray.Index(i).String() } // 这里可以对strSlice做其他处理,最后返回长度 return len(strSlice) }
调用验证
你的JavaScript调用代码无需修改:
WasmCount(["a", "b"]) // 返回2
扩展:处理其他类型数组
如果需要接收number[]等其他类型数组,只需要将String()替换为对应类型的转换方法即可,比如Int()、Float()等。
内容的提问来源于stack exchange,提问作者amd
相关产品推荐
相关产品推荐

