Golang Redis评估返回数组

42fyovps  于 2022-12-07  发布在  Go
关注(0)|答案(2)|浏览(135)

bounty将在6天后过期。回答此问题可获得+50声望奖励。TruBlu希望吸引更多人关注此问题。

当Lua脚本在Eval调用期间返回一个表数组时,如何在go中将其转换为[]字符串?
redis cli以下列格式返回批量回复。
1.值1
1.值2
go-redis eval函数是否将批量条目返回为
[“值1”、“值2”]

50pmv0ei

50pmv0ei1#

在Lua(redis-cli,eval)端,您可以使用cjson.encode()将表作为json字符串返回

eval 'return(cjson.encode({"value1", "value2"}))' 0
"[\"value1\",\"value2\"]"

-- A Function that returns a table can be returned with...
eval 'return(cjson.encode(A_Function_That_Returns_A_Table()))' 0

...如果表键/值数据类型适合json数据类型。
例如,作为json值的Lua函数失败。
如果它(json字符串)不是你想要的,那么关于返回的表的更多信息是必要的。
因为在已知的表结构上这是可能的...

eval 'return(({"value1", "value2"})[1])' 0
"value1"
eval 'return(({"value1", "value2"})[2])' 0
"value2"
iih3973s

iih3973s2#

可以使用encoding/json包将JSON字符串转换为字符串切片。

package main

import (
    "encoding/json"
    "fmt"
)

// jsonString is the JSON string that you want to convert to a slice of strings.
const jsonString = `["value1", "value2"]`

func main() {
   
    var stringSlice []string

    // Unmarshal the JSON string into the stringSlice variable.
    err := json.Unmarshal([]byte(jsonString), &stringSlice)
    if err != nil {
        fmt.Println(err)
        return
    }

    
    fmt.Println(stringSlice) // ["value1", "value2"]
}

相关问题