как добавить строку на карту типа строки в интерфейс

# #dictionary #go #slice

Вопрос:

У меня есть карта строки для интерфейса {}, созданная

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

в конечном счете мне нужен следующий результат

 x["key1"] = ["value1","value2","value3", ......]
 

кто-нибудь может помочь , как добавить строковые значения к этой карте ?

Ответ №1:

Вы можете добавлять только к фрагментам, но не к картам.

Чтобы добавить указанное вами значение, используйте:

 x["key"] = []string{"value1","value2","value3"}
fmt.Println(x)
 

Если "key" он уже существует, вы можете использовать утверждение типа для добавления к нему:

 x["key"] = append(x["key"].([]string), "value4", "value5")
fmt.Println(x)
 

Вывод (попробуйте примеры на игровой площадке Go):

 map[key:[value1 value2 value3]]
map[key:[value1 value2 value3 value4 value5]]
 

Примечание: вы должны переназначить новый срез (возвращенный append() ).

Также обратите внимание , что если "key" его еще нет на карте или он не соответствует типу []string , приведенный выше код вызовет панику. Чтобы защититься от такой паники, добавляйте только в том случае, если значение существует и имеет тип []string :

 if s, ok := x["key"].([]string); ok {
    x["key"] = append(s, "value4", "value5")
} else {
    // Either missing or not []string
    x["key"] = []string{"value4", "value5"}
}
 

Попробуйте это на игровой площадке Go.

Комментарии:

1. паника: преобразование интерфейса: интерфейс {} равен нулю, а не []строка [восстановлена] паника: преобразование интерфейса: интерфейс {} равен нулю, а не []строка

2. @AbhishekDK Да, пожалуйста, прочитайте вторую половину ответа, в которой это объясняется и рассматривается.