Программа напечатает [a b x]. Слайс arr[1:2] имеет длину 1 и ёмкость 2, поэтому append заменяет третий элемент общего массива.
Какой вывод получит программа №44
Программа напечатает [a b x]. Слайс arr[1:2] имеет длину 1 и ёмкость 2, поэтому append заменяет третий элемент общего массива.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Какой результат будет напечатан после запуска следующего кода?
import (
"fmt"
)
func Add(sliceParam []string) {
sliceParam = append(sliceParam, "x")
}
func main() {
arr := []string{"a", "b", "c"}
Add(arr[1:2])
fmt.Println(arr)
}
Ответ
Программа напечатает [a b x]. Слайс arr[1:2] имеет длину 1 и ёмкость 2, поэтому append заменяет третий элемент общего массива.
В Add увеличивается только локальная длина слайса, но запись в backing array видна через arr. Если передать arr[1:2:2], append выделит новый массив и исходный arr останется [a b c]. Возвращать слайс нужно отдельно, если вызывающий должен сохранить новое содержимое расширенного среза.