#golang #map
Разбирая открытый код проекта, встретил вот такую запись
args := map[string]interface{}{}
Не могу понять что это за карта и какого вида значения в ней должны хранится.
Весь контекст в котором используется запись в качестве request передается route вида
controller/action в качестве Params как я понял json:
func (connect *Connect) Request(request string, params string) (interface{}, error) {
req, err := connect.factory.NewRequest(Host)
if err != nil {
return nil, err
}
args := map[string]interface{}{}
json.Unmarshal([]byte(params), &args)
resp, err := req.Do(request, args)
if err != nil {
return nil, err
}
result, err := resp.GetMethodResult()
if err != nil {
return nil, err
}
return result, nil
}
Прошу приведите пример.
Ответы
Ответ 1
map[string]interface{} - это карта, где ключ string, а значение удовлетворяет типу interface{} interface{} - это пустой интерфейс, ему удовлетворяет любой объект (аналог void* из C) а последние "{}" это инициализация карты без значений (типа как map[int]int{1:2, 3:4} ) можно переписать в виде args := make(map[string]interface{}) или более развернуто type any interface{} var args map[string]any args = make(map[string]any,0) // или просто args = make(map[string]any)Ответ 2
map[string]interface{} - это лишь указание типа, что ваша переменная типа ключ - строковая, и переменная типа interface{}. когда вы объявляете переменную такого типа: var a map[string]interface{} a["test"] = 1 \\ panic: assignment to entry in nil map , то будет ошибка. Нужно инициализировать пустую мапу: var a map[string]interface{} a = map[string]interface{}{} a["test"] = 1 , после чего, с ней можно работать.
Комментариев нет:
Отправить комментарий