Нельзя написать &m["key"] потому что map может в любой момент рехешироваться, и элемент переедет в другой бакет. Указатель станет невалидным.
m := map[string]User{"alice": {Name: "Alice"}}
// p := &m["alice"] // compile error!
// m["alice"].Name = "" // тоже ошибка!
Решения:
// 1. Копия
u := m["alice"]
u.Name = "Bob"
m["alice"] = u
// 2. Map указателей
m2 := map[string]*User{"alice": {Name: "Alice"}}
m2["alice"].Name = "Bob" // OK
В слайсе можно брать адрес элемента (&s[0]), но это тоже опасно — при append слайс может переехать.