You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 19:42:36