Какой результат будет выведен в консоль в примере 13

Если после третьего append capacity(x) больше 3, оба среза покажут [0 1 2 4]. Точный рост capacity язык не гарантирует.

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

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

Если после третьего append capacity(x) больше 3, оба среза покажут [0 1 2 4]. Точный рост capacity язык не гарантирует.

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

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

Условие

Определите, какой вывод появится после выполнения следующей программы:

func a(){ 
    x:=[]int{}
    x = append(x,0)
    x = append(x,1)
    x = append(x,2)        
    y := append(x, 3)
    z:= append(x, 4)
    fmt.Println(y, z)
}

Ответ

Если после третьего append capacity(x) больше 3, оба среза покажут [0 1 2 4]. Точный рост capacity язык не гарантирует.

После трёх добавлений распространённая реализация выделяет вместимость 4. Тогда y и z используют один массив, а второй append перезаписывает его элемент с индексом 3.

Если capacity(x) равна 3, оба добавления выделят отдельные массивы, и вывод будет [0 1 2 3] [0 1 2 4]. Чтобы результат не зависел от стратегии роста, ограничьте вместимость: base := x[:len(x):len(x)] и выполняйте оба append от base либо копируйте данные. Также функция a должна быть вызвана: одно её объявление ничего не выводит.

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

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

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

Подробнее