Какой результат покажет консоль в примере №50

Значение a[0] останется 1. Добавление трёх элементов превышает capacity исходного среза, поэтому b получает независимый массив.

Короткий ответ

Что ответить на собеседовании

Значение a[0] останется 1. Добавление трёх элементов превышает capacity исходного среза, поэтому b получает независимый массив.

Подробный разбор

Ответ с пояснениями

Условие

Что будет напечатано после выполнения следующего кода на Go:

a := []int{1,2}
b :=a[:]
b = append(b, 3, 4, 5)
b[0] = 2
a[0] - ?

Определите значение выражения a[0] после всех операций.

Ответ

Значение a[0] останется 1. Добавление трёх элементов превышает capacity исходного среза, поэтому b получает независимый массив.

Изначально a и b разделяют массив длины и вместимости 2. Вызов append расширяет b до длины 5 и обязан выделить новую область, скопировав туда 1 и 2.

После этого b[0] = 2 относится только к новому массиву. Последняя строка a[0] - ? — запись вопроса, не допустимый Go-код; для проверки нужен fmt.Println(a[0]). В отличие от append с достаточной вместимостью, здесь исходный массив не перезаписывается.

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

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

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

Подробнее