Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: map, address, pointer, range, copy

Что произойдёт, если взять адрес элемента из мапы?

Проверяет знание поведения указателей на значения в map при итерации.

Короткий ответ

Нельзя надёжно взять адрес элемента мапы: &m[key] не компилируется. При итерации for k,v := range m беря &v вы получите адрес копии, а не элемента в map. Для хранения указателей в map нужно использовать map[K]*V, тогда &V{…} сохраняется как значение.

Длинный ответ

Неподдерживаемое:

ptr := &m[key] // error: cannot take the address of m[key]

Итерация:

for k, v := range m {
  	ptr := &v // ptr указывает на локальную копию v, все ptr одинаковы после итерации
}

Правильный способ:

  • Хранить *Value в самой map: map[K]*V.

  • При создании m[key] = &V{…}.

Вывод:

Значения из map возвращаются по значению, а не ссылке.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    1

  • Сложность:

    4

Навыки

  • Golang

    Golang

Ключевые слова

#map

#address

#pointer

#range

#copy

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.