Как написано, программа не компилируется из-за закомментированного импорта 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.