2015-11-25 73 views
0

字符串我是新去的語言,我想從它返回兩個字符串的函數的值,即[str1, str2]轉換接口{}爲[]在Golang

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]] 

看起來如T他鍵入[][]uint8,所以,我想這樣

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

失敗,v是[]

而且我也試過:

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

什麼都沒有改變

如何解決這個問題? 任何幫助將不勝感激:)

PS:我調試和找到的第一個字符串是"9988"

+1

不要忽略錯誤,方法是將它們分配給下劃線。檢查並打印它們。他們很可能會爲您提供解決方案。 –

+1

'v:= ret。([] string)'恐慌嗎?如果是的話,恐慌消息會說什麼? –

+0

不,只是得到v是'[]'@ Ainar-G –

回答

3

我知道,從你的其他問題,你問Redigo。使用redis.Strings函數來獲取從服務器的應答爲[]字符串:

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

的variabile的s是[]字符串。

查看documentation about reply helpers瞭解更多信息。

+3

那麼這將是有用的信息在這個問題。 – JimB

+0

這真的很有幫助,這就是@JimB所說的:ref:https://github.com/garyburd/redigo/blob/master/redis/reply.go#L250 –

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

+0

我在這裏遇到了一個恐慌:界面轉換:界面是[]界面{},而不是[] [] uint8 –

+0

爲什麼你的函數應該返回兩個字符串(如你所說)不會首先返回兩個字符串?當然,這是一個更好的開始。 –