Фрагмент не компилируется: handle2 обращается к необъявленной в своей области s1, а main использует неопределённую s2. Точный вывод исходной программы отсутствует.
Какой вывод получит консоль при запуске программы №32
Фрагмент не компилируется: 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]. Изменение элемента общего массива видно снаружи, а новая длина локального слайса без возврата не сохраняется. Это один явно выбранный вариант исправления, не единственная возможная трактовка опечаток.