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

В исходном полном файле неиспользуемый import time мешает компиляции. После его удаления обычный вывод — [1 2 3] [1 2 3 5] [1 2 3 5].

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

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

В исходном полном файле неиспользуемый 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.

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

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

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

Подробнее