m := map[string]struct{X int}{"a": {1}}; m["a"].X = 2?Код не скомпилируется. Значения в map в Go не адресуемы. Нельзя взять адрес элемента map (например, для присваивания полю структуры), потому что при росте map внутреннее хранилище может перемещаться. Выражение m["a"].X = 2 пытается изменить поле у временного значения - это запрещено. Решение: извлечь значение в переменную, изменить и записать обратно, либо хранить в map указатели: map[string]*struct{X int}.
m := map[string]struct{ X int }{"a": {1}}
v := m["a"]
v.X = 2
m["a"] = v