По порядку Middle Слайсы и мапы изнутри обновлено

Шаги append при нехватке ёмкости

Вопрос

Расставьте по порядку, что происходит в s = append(s, x), когда len(s) == cap(s).

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

Расставьте шаги по порядку стрелками.

  1. 1
    Старые элементы копируются в новый массив
  2. 2
    Рантайм вычисляет новую ёмкость (рост с округлением под класс размера)
  3. 3
    append возвращает новый заголовок, и он присваивается в s
  4. 4
    Выделяется новый базовый массив
  5. 5
    Новый элемент записывается после скопированных
Показать ответ и разбор

Коротко

Сначала решается, сколько памяти нужно, затем она выделяется, копируются старые данные, дописывается элемент, и только присваивание результата делает новый слайс видимым в s.

Правильный порядок

  1. 1
    Рантайм вычисляет новую ёмкость (рост с округлением под класс размера)
  2. 2
    Выделяется новый базовый массив
  3. 3
    Старые элементы копируются в новый массив
  4. 4
    Новый элемент записывается после скопированных
  5. 5
    append возвращает новый заголовок, и он присваивается в s

Разбор

Сначала решается, сколько памяти нужно, затем она выделяется, копируются старые данные, дописывается элемент, и только присваивание результата делает новый слайс видимым в s.

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

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