2015-11-25 4 views
0

Я новичок в GO язык, и я пытаюсь получить значение из функции, которая возвращает две строки, то есть [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]] 

который выглядит как т он типа [][]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)' panic? Если да, то что говорит паническое сообщение? –

+0

нет, просто получите v is '[]' @ 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

У меня здесь есть паника: интерфейс: интерфейс [] interface {}, not [] [] uint8 –

+0

Почему ваша функция, которая должна возвращать две строки (как вы сказали), не возвращает две строки в первую очередь ? Наверняка, это лучшее место для начала. –

Смежные вопросы