Проверяет знание поведения указателей на значения в 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 возвращаются по значению, а не ссылке.