#arrays #go #maps
#массивы #Вперед #Карты
Вопрос:
У меня есть карта со строковыми ключами и разными типами значений, при печати она выглядит так:
map[command:ls count:[1 1]]
При проверке reflect.TypeOf
количества он возвращает тип []interface{}
. Я не могу получить доступ к значениям по индексу, и если я попытаюсь передать его в функцию, которая принимает параметр типа []interface{}
, он утверждает, что я привязываю передачу значения типа interface{}
Я хотел бы получить доступ к счетчику в этом примере, который будет равен 2 значениям. 1
и 1
.
Ответ №1:
Вы должны различать тип и базовый тип. Ваша карта относится к типу map[string]interface{}
. Это означает, что значение for count
имеет тип interface{}
, а его базовый тип if []interface{}
. Таким образом, вы не можете передать счетчик как тип []interface{}
. Вы должны выполнить утверждение типа, прежде чем использовать его в качестве массива. Тогда каждый элемент будет иметь тип interface{}
, который, в свою очередь, может быть утвержден как int
(как кажется, ваши данные).
Пример:
count := m["count"].([]interface{})
value1 := count[0].(int)
value2 := count[1].(int)
Комментарии:
1. Спасибо, вы объяснили это невероятно хорошо, и ваше решение работает отлично.