Назад к вопросам
Senior
5
Можно ли взять указатель на значение, хранящееся в map?
Компании, где спрашивали
Магнит Тех
Ответ от нейросети
sobes.tech AI
В Go нельзя напрямую взять указатель на значение, хранящееся в map, если это значение — не адресуемое выражение. При обращении к элементу map, например m[key], возвращается копия значения, а не ссылка на него.
Однако, если в map хранятся указатели, то можно работать с ними:
m := map[string]*int{}
val := 42
m["key"] = &val
ptr := m["key"] // ptr имеет тип *int
Если же в map хранятся значения (не указатели), то взять адрес элемента напрямую нельзя:
m := map[string]int{"key": 42}
// ptr := &m["key"] // ошибка компиляции: cannot take the address of m["key"]
Чтобы изменить значение в map через указатель, можно:
- Хранить в map указатели на значения.
- Извлечь значение, изменить его, и записать обратно в map.
Пример:
m := map[string]int{"key": 42}
val := m["key"]
val = 100
m["key"] = val
Итог: нельзя взять указатель на значение в map напрямую, если это не указатель. Нужно либо хранить указатели, либо работать с копиями и обновлять map.