Назад к вопросам
Senior
2
Analyze the following Go code snippet and explain what will be printed by the program and why: ```go func main() { type User struct { Name string } m := map[string]User{ "a": {Name: "Alice"}, } u := m["a"] u.Name = "Bob" fmt.Println(m["a"].Name) } ```
Компании, где спрашивали
CRTEX
Ответ от нейросети
sobes.tech AI
Программа выведет:
Alice
Объяснение:
В Go при работе с map, если значение — это структура (не указатель), то при обращении к элементу m["a"] возвращается копия структуры, а не ссылка на оригинал.
В коде:
u := m["a"] // u — копия структуры User
u.Name = "Bob" // изменяется поле Name в копии u, а не в оригинале в map
Поэтому изменение u.Name не влияет на значение в map.
При выводе fmt.Println(m["a"].Name) мы получаем оригинальное значение поля Name, которое равно "Alice".
Если бы нужно было изменить значение в map, нужно было бы либо использовать указатели в map, либо присвоить обратно изменённую структуру:
u := m["a"]
u.Name = "Bob"
m["a"] = u
Тогда вывод был бы "Bob".