Какой вывод получит программа №64

Вывод: [1 2 3 10 11] [2 3 10 11 12 13]. Первые два append меняют массив arr, следующие добавления работают с новым массивом.

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

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

Вывод: [1 2 3 10 11] [2 3 10 11 12 13]. Первые два append меняют массив arr, следующие добавления работают с новым массивом.

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

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

Условие

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

import ("fmt"
        )

func main(){
    arr:=[5]int{1, 2, 3, 4, 5}
    
    bar := arr[1:3]
    bar = append(bar,10)
    bar = append(bar,11)
    bar = append(bar,12)
    bar = append(bar,13)
    fmt.Println(arr, bar)
            

}

Вопрос проверяет понимание того, как работают срезы, их ёмкость и как append может приводить к переаллокации базового массива.

Ответ

Вывод: [1 2 3 10 11] [2 3 10 11 12 13]. Первые два append меняют массив arr, следующие добавления работают с новым массивом.

bar = arr[1:3] имеет длину 2 и вместимость 4. Значения 10 и 11 занимают свободные позиции общего массива, меняя arr[3] и arr[4].

Добавление 12 превышает capacity и переносит срез в другой массив. Значения 12 и 13 поэтому не попадают в arr, но уже записанные 10 и 11 сохраняются. Точная вместимость нового массива не важна для ответа: его отделение происходит при добавлении пятого элемента bar.

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

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

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

Подробнее