Sobes.tech
Назад к вопросам
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".