#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 , после чего, с ней можно работать.
Комментариев нет:
Отправить комментарий