Sobes.tech
Back to questions
Senior
4

Можно ли взять указатель на значение, хранящееся в map?

Companies where asked
Магнит Тех

Answer from AI

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.