Как ограничение capacity влияет на результат функции append

Будет напечатано [banana apple grape watermelon pineapple]. Прямая запись xs[0] меняет fruit[1], но 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. Полная форма среза ограничивает возможность дописывания в общий массив, но не делает уже видимые элементы независимой копией.

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

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

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

Подробнее