Какой результат выведет программа №12

Программа напечатает [1 2]. В add передаётся копия заголовка слайса, поэтому изменения её длины не отражаются на s в main.

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

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

Программа напечатает [1 2]. В add передаётся копия заголовка слайса, поэтому изменения её длины не отражаются на s в main.

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

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

Условие

Каким будет вывод программы после её выполнения?

func main() {
    s := make([]int, 0, 3)
    s = append(s, 1)
    s = append(s, 2)
    add(s)
    fmt.Printf("%v", s)
}

func add(s []int) {
    s = append(s, 3)
    s = append(s, 4)
}

Ответ

Программа напечатает [1 2]. В add передаётся копия заголовка слайса, поэтому изменения её длины не отражаются на s в main.

Первый append записывает 3 в общий массив на позицию 2: исходная capacity равна 3. Второй append уже требует нового массива и записывает туда 4. Длина исходного s остаётся равной 2, поэтому скрытая тройка не попадает в fmt.Printf. Чтобы сохранить расширение, add должна вернуть слайс, а вызывающий — присвоить результат.

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

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

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

Подробнее