Будет напечатано [banana apple grape watermelon pineapple]. Прямая запись xs[0] меняет fruit[1], но append уже выделяет другой массив.
Как ограничение capacity влияет на результат функции append
Будет напечатано [banana apple grape watermelon pineapple]. Прямая запись xs[0] меняет fruit[1], но append уже выделяет другой массив.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, какое значение будет напечатано программой при её выполнении.
func main() {
fruit := make([]string, 5)
fruit[0] = "banana"
fruit[1] = "cucumber"
fruit[2] = "grape"
fruit[3] = "watermelon"
fruit[4] = "pineapple"
xs := fruit[1:3:3]
xs[0] = "apple"
xs = append(xs, "mango")
fmt.Println(fruit)
}
Ответ
Будет напечатано [banana apple grape watermelon pineapple]. Прямая запись xs[0] меняет fruit[1], но append уже выделяет другой массив.
У fruit[1:3:3] длина 2 и capacity 2. Поэтому добавление mango не помещается в прежнюю ёмкость и не заменяет watermelon. Полная форма среза ограничивает возможность дописывания в общий массив, но не делает уже видимые элементы независимой копией.