Какой результат выведет программа в консоль (пример 9)

После вызова add будет выведено [a b x]. Переданный срез имеет свободную вместимость, поэтому append перезапишет третий элемент data.

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

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

После вызова add будет выведено [a b x]. Переданный срез имеет свободную вместимость, поэтому append перезапишет третий элемент data.

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

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

Условие

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

func add(slice []string) {
    slice = append(slice, "x")
}

func main() {
    data := []string{"a", "b", "c"}
    add(data[1:2])
    fmt.Println(data)
}

Ответ

После вызова add будет выведено [a b x]. Переданный срез имеет свободную вместимость, поэтому append перезапишет третий элемент data.

Срез data[1:2] содержит только b, но его вместимость равна 2: до конца общего массива остаются b и c. Внутренний append добавляет x сразу после b, на место c.

Изменяется только локальная длина среза, однако запись в общий массив видна через data. Чтобы append не затронул хвост, можно передать data[1:2:2]: его вместимость равна длине, и добавление потребует нового массива.

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

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

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

Подробнее