Определение вывода при использовании функции append

В типичной реализации с достаточной capacity у foo результат — [1 2 3 5] [1 2 3 5]. Но точную стратегию роста capacity язык не фиксирует, поэтому важна оговорка о совместном массиве.

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

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

В типичной реализации с достаточной capacity у foo результат — [1 2 3 5] [1 2 3 5]. Но точную стратегию роста capacity язык не фиксирует, поэтому важна оговорка о совместном массиве.

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

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

Условие

Нужно понять, какие данные появятся в консоли после выполнения программы, учитывая особенности работы функции append и то, как слайсы взаимодействуют при присваивании.

func main() {
  var foo []int
  var bar []int

  foo = append(foo, 1)
  foo = append(foo, 2)
  foo = append(foo, 3)
  bar = append(foo, 4)
  foo = append(foo, 5)

  fmt.Println(foo, bar)
}

Ответ

В типичной реализации с достаточной capacity у foo результат — [1 2 3 5] [1 2 3 5]. Но точную стратегию роста capacity язык не фиксирует, поэтому важна оговорка о совместном массиве.

После третьего append часто остаётся свободное место. bar=append(foo,4) записывает четвёртый элемент в общий массив, не меняя длину foo. Следующий append(foo,5) перезаписывает тот же элемент, видимый через bar. Если свободной ёмкости после трёх элементов не было, оба append выделят независимые массивы и bar сохранит 4. Для независимости явно копируйте слайс.

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

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

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

Подробнее