Какой вывод получит консоль при запуске программы №32

Фрагмент не компилируется: handle2 обращается к необъявленной в своей области s1, а main использует неопределённую s2. Точный вывод исходной программы отсутствует.

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

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

Фрагмент не компилируется: handle2 обращается к необъявленной в своей области s1, а main использует неопределённую s2. Точный вывод исходной программы отсутствует.

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

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

Условие

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

func handle1(s1 []int){
    s1[0] = 111
}
func handle2(s2 []int){
    s1 = append(s1,12345)
}

func main() {
    s1 := [] int{0, 1, 2}
    
    log.Printf("before : %v", s1)
            
    handle1(s1)
    log.Printf("after handle1 : %v", s1)

    handle1(s2)
    log.Printf("after handle1 : %v", s2)        
}

Ответ

Фрагмент не компилируется: handle2 обращается к необъявленной в своей области s1, а main использует неопределённую s2. Точный вывод исходной программы отсутствует.

Если подразумевались s2 = append(s2,12345) в handle2 и handle2(s1) в main, то сначала будет [0 1 2], после handle1 — [111 1 2], после handle2 — снова [111 1 2]. Изменение элемента общего массива видно снаружи, а новая длина локального слайса без возврата не сохраняется. Это один явно выбранный вариант исправления, не единственная возможная трактовка опечаток.

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

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

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

Подробнее