Присваивание структуры создаёт копию, поэтому исходно выводится 123. Измените a напрямую, присвойте изменённую копию обратно или используйте указатель на a.
Почему изменение копии структуры не меняет оригинал
Присваивание структуры создаёт копию, поэтому исходно выводится 123. Измените a напрямую, присвойте изменённую копию обратно или используйте указатель на a.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В Go: type Item struct { Value int }; a := Item{123}; b := a; b.Value = 456; fmt.Println(a.Value). Как получить 456 при выводе a.Value?
Ответ
Присваивание структуры создаёт копию, поэтому исходно выводится 123. Измените a напрямую, присвойте изменённую копию обратно или используйте указатель на a.
Например, после изменения b выполните a = b. Альтернатива: b := &a; b.Value = 456. Выбор зависит от того, нужен ли независимый объект или совместное изменение. Для полей map, slice и pointer копирование структуры не создаёт глубокую копию вложенных данных.