在Golang中将interface {}转换为[]字符串

时间:2015-11-25 14:00:07

标签: go

我是GO语言的新手,我试图从一个返回两个字符串的函数中获取一个值,即[str1, str2]

 ret, err := fun1(....)

功能的原型是

func fun1(...) (interface{}, error)

我打印ret,它是

[[57 57 56 56] [97 100 98 49 57 55 102 98 49 101 57 48 52 98 102 56 55 102 52 56 57 57 55 54 49 55 101 57 49 100 98 49]]

看起来像[][]uint8类型,所以,我试过这种方式

    v, _ := ret.([][]uint8)
    str1, _ := strconv.Atoi(string(v[0]))
    str2, _ := strconv.Atoi(string(v[1]))

失败了,v是[]

我也尝试过:

   v, _ := ret.([]string)

没有改变

如何解决这个问题? 任何帮助将不胜感激:)

PS:我调试并找到第一个字符串是"9988"

2 个答案:

答案 0 :(得分:3)

我从你的其他问题中知道你在问Redigo。使用redis.Strings函数将服务器的回复作为[]字符串:

s, err := redis.Strings(fun1(....))

变量s是[]字符串。

有关详细信息,请参阅documentation about reply helpers

答案 1 :(得分:0)

你有一片切片,你需要将每个切片投射到你想要的切片上。假设它们是字节,你想在切片中打印每个字符串,然后:

ret, err := fun1(....)
if err != nil {
     panic(err)
}
for idx, val := range ret.([][]byte) {
     fmt.Println("At idx", idx, "string:", string(val))
}

以上数据的示例:https://play.golang.org/p/VsZhSaGmQk