Какой массив будет напечатан

Как написано, программа не компилируется из-за закомментированного импорта fmt. После его восстановления будет [1 2 3 4]: append выполняется в новом массиве, а результат sub игнорируется.

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

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

Как написано, программа не компилируется из-за закомментированного импорта fmt. После его восстановления будет [1 2 3 4]: append выполняется в новом массиве, а результат sub игнорируется.

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

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

Условие

Определите, какой массив будет выведен на экран после выполнения программы.

package main

// import "fmt"

func sub(arr []int) []int {
    return append(arr, 5, 6)
}

func main() {
    nums := []int{1, 2, 3, 4}
    sub(nums[2:])
    fmt.Println(nums)
}

Ответ

Как написано, программа не компилируется из-за закомментированного импорта fmt. После его восстановления будет [1 2 3 4]: append выполняется в новом массиве, а результат sub игнорируется.

У nums[2:] длина и ёмкость равны 2. Добавление двух элементов требует выделения другого backing array, куда копируются 3 и 4 и дописываются 5 и 6. Исходный nums не изменяется. Если нужен результат, его следует сохранить; он будет [3 4 5 6], а не автоматически расширенный исходный nums.

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

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

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

Подробнее