Выбор ответа Middle Слайсы и мапы изнутри спрашивают часто обновлено

append в подслайс затирает исходный

Вопрос

Что выведет код?

a := []int{1, 2, 3, 4}
b := a[:2]
b = append(b, 9)
fmt.Println(a)

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: [1 2 9 4]. b := a[:2] смотрит в тот же массив, len 2, cap 4. append(b, 9) помещается в ёмкость и записывает 9 в элемент с индексом 2 общего массива, то есть поверх тройки в a.

Варианты ответа

  1. [1 2 9 4]правильный ответ
  2. [1 2 3 4]
  3. [1 2 3 4 9]
  4. [1 2 9]

Разбор

b := a[:2] смотрит в тот же массив, len 2, cap 4. append(b, 9) помещается в ёмкость и записывает 9 в элемент с индексом 2 общего массива, то есть поверх тройки в a. Новый массив не выделяется, поэтому a меняется. Защита: a[:2:2] (ёмкость 2), тогда append скопирует данные.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.