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

Исходник не компилируется: у слайса нет метода append. Если заменить a.append(a,7) на a=append(a,7), вывод будет [0 1 5 6], [5 1 5 6 7], затем [5 1 5 6].

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

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

Исходник не компилируется: у слайса нет метода append. Если заменить a.append(a,7) на a=append(a,7), вывод будет [0 1 5 6], [5 1 5 6 7], затем [5 1 5 6].

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

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

Условие

Определите, что будет напечатано в консоль после выполнения приведённого ниже Go‑кода.

func fn(a []int){
    a[2] = 5
    a = append(a, 6)
    
    fmt.Println(a)
    
    a.append(a, 7)
    
    a[0] = 5
    
    fmt.Println(a)        
}

func main() {
    a := make ([]int, 0, 5)
    for i := 0; i < 4; i++ {
        a = append(a, i)
    }
    
    fn(a[:3])
    
    fmt.Println(a)
}

Ответ

Исходник не компилируется: у слайса нет метода append. Если заменить a.append(a,7) на a=append(a,7), вывод будет [0 1 5 6], [5 1 5 6 7], затем [5 1 5 6].

В main длина a равна 4, capacity — 5. Переданный a[:3] делит тот же массив и имеет capacity 5, поэтому оба append помещаются без новой аллокации. Запись a[2]=5, добавление 6 и запись a[0]=5 видны вызывающему. Последняя семёрка лежит за пределом его длины 4 и потому не печатается в main.

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

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

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

Подробнее