Sobes.tech
Назад к вопросам
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.