# #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 Да, пожалуйста, прочитайте вторую половину ответа, в которой это объясняется и рассматривается.