Как перебрать массив в интерфейсе {}? - PullRequest
0 голосов
/ 24 сентября 2018

у меня есть карта

myMap := make(map[string]interface{})

один из элементов этой карты является массивом строки [] map [string]

myMap["element"] = []map[string]string

как я могу выполнить этот массив?

1 Ответ

0 голосов
/ 24 сентября 2018

Вы не можете перебрать значение типа interface{}, то есть типа, которое вы получите при поиске по любому ключу вашей карты (поскольку он имеет тип map[string]interface{}).

Вы должны использовать утверждение типа , чтобы получить значение этого типа, от которого вы можете затем установить диапазон.

myElt := myMap["element"]
v, ok := myElt.([]map[string]string)
if !ok {
    // TODO: Handle the error
}

for i, item := range v {
    // TODO: do something with each map[string]string item in the slice
}

Вот пример рабочей площадки с использованиемПридуманная настройка для этих типов карт.


Если вы знаете, что значение относится к указанному типу среза, вы можете пропустить проверку ok в утверждении типа.Это может иметь место, если вы используете чью-либо реализацию универсальной карты (которая имеет ключи типа interface{}) и знаете, что вы когда-либо заполняете ее только значениями типа []map[string]string.Однако, будьте осторожны: если вы получите значение , а не этого типа с карты, и вы пропустите проверку, ваша программа будет паниковать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...