Почему изменение копии структуры не меняет оригинал

Присваивание структуры создаёт копию, поэтому исходно выводится 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 копирование структуры не создаёт глубокую копию вложенных данных.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее