Если после третьего append capacity(x) больше 3, оба среза покажут [0 1 2 4]. Точный рост capacity язык не гарантирует.
Какой результат будет выведен в консоль в примере 13
Если после третьего 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 должна быть вызвана: одно её объявление ничего не выводит.