Страницы

Поиск по вопросам

пятница, 7 февраля 2020 г.

Golang: запись вида map[string]interface{}{}

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

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

Отправить комментарий