Какой вывод получит программа (пример 29)

Будет напечатано `append [1 5]`, затем `after [1 5 3 4]`. У list[:1] длина 1, но capacity 4, поэтому append изменяет общий массив.

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

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

Будет напечатано append [1 5], затем after [1 5 3 4]. У list[:1] длина 1, но capacity 4, поэтому append изменяет общий массив.

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

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

Условие

Определите, какой текст появится в консоли после запуска следующей Go‑программы:

import (
        "fmt"
        )

func main() {
     list := [] int{1, 2, 3, 4}
     handle(list[:1])
     fmt.Println("after", list)       
}

func handle(list [] int) {
    list = append(list, 5)
     fmt.Println("append", list)       
}

Ответ

Будет напечатано append [1 5], затем after [1 5 3 4]. У list[:1] длина 1, но capacity 4, поэтому append изменяет общий массив.

Функция handle получает копию заголовка слайса и увеличивает только её длину. Запись пятёрки попадает во второй элемент исходного массива, что видно после возврата. Если дописывание не должно влиять на исходник, передайте list[:1:1] или отдельную копию. Полное ограничение capacity защищает именно от совместного append, а не от прямой записи первого элемента.

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

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

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

Подробнее