Как получить доступ к определенным частям массива с помощью интерфейса типа [] {} в Go?

#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. Спасибо, вы объяснили это невероятно хорошо, и ваше решение работает отлично.