go-redis Eval调用Lua返回数组如何转为Go的[]string类型?
在Go中处理go-redis Eval返回的Lua数组为[]string类型
go-redis的Eval函数不会直接返回[]string类型结果。当Lua脚本返回数组形式的table时,Eval会返回一个[]interface{}类型的切片,切片内每个元素对应Lua数组里的字符串值,和Redis CLI显示的1) val1这类批量回复一一对应。
要将其转换为[]string,可通过类型断言加遍历实现,示例代码如下:
package main import ( "errors" "github.com/go-redis/redis/v8" "context" ) func getEvalResultAsStrings(ctx context.Context, client *redis.Client) ([]string, error) { // 执行返回数组的Lua脚本示例 res, err := client.Eval(ctx, `return {"val1", "val2"}`, []string{}).Result() if err != nil { return nil, err } // 将结果断言为[]interface{} arr, ok := res.([]interface{}) if !ok { return nil, errors.New("响应不是数组类型") } // 转换为[]string strArr := make([]string, len(arr)) for i, item := range arr { strItem, ok := item.(string) if !ok { return nil, errors.New("数组元素不是字符串类型") } strArr[i] = strItem } return strArr, nil }
内容的提问来源于stack exchange,提问作者TruBlu
相关产品推荐
相关产品推荐

