В исходном полном файле неиспользуемый import time мешает компиляции. После его удаления обычный вывод — [1 2 3] [1 2 3 5] [1 2 3 5].
Какой вывод получит программа №61
В исходном полном файле неиспользуемый import time мешает компиляции. После его удаления обычный вывод — [1 2 3] [1 2 3 5] [1 2 3 5].
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, какой текст будет выведен в консоль после выполнения следующего кода на Go.
import ("fmt"
"time")
func main() {
{
arr := make([]int, 0)
arr = append(arr, 1)
arr = append(arr, 2)
arr = append(arr, 3)
arrB := append(arr, 4)
arrC := append(arr, 5)
fmt.Printf("%v %v %v", arr, arrB, arrC)
}
}
Ответ
В исходном полном файле неиспользуемый import time мешает компиляции. После его удаления обычный вывод — [1 2 3] [1 2 3 5] [1 2 3 5].
После трёх append распространённая реализация имеет capacity(arr) = 4. Поэтому arrB и arrC записывают в одну ячейку общего массива, а второе добавление заменяет 4 на 5. Длина arr остаётся 3.
Точный алгоритм роста вместимости не закреплён языком: если она оказалась равной 3, оба добавления создадут отдельные массивы и arrB сохранит 4. Чтобы исключить зависимость от capacity, создайте отдельные копии или ограничьте вместимость исходного среза его длиной перед каждым append. Как самостоятельному файлу также нужен package main.