Ellipsis для массива в Go

Reading time ~1 minute

Токен ... используется для массивов и он имеет огромный смысл именно потому, что массивы в Go имеют фиксированную длину.

Дело в том, что ... в контексте массивов решает проблему ручного подсчета элементов.

Как это работает

Когда объявляется массив в Go, мы обязаны указать его размер:

var arr [5]int = [5]int{10, 20, 30, 40, 50}

Если мы захотим добавить в этот массив еще один элемент (например, 60), нам придется изменить размер в двух местах:

var arr [6]int = [6]int{10, 20, 30, 40, 50, 60} // Изменили 5 на 6 в типе и в инициализаторе

Чтобы избавиться от этого рутинного подсчета, в Go и был введен токен ... для массивов:

arr := [...]int{10, 20, 30, 40, 50}

Здесь мы как бы говорим компилятору: “Посчитай сам, сколько здесь элементов, и подставь это число в тип массива”.

Очень важно понимать: ... здесь не делает массив динамическим. Результатом выполнения [...]int{10, 20, 3} будет обычный статический массив [3]int. Как только компилятор посчитал элементы, размер жестко фиксируется.

В чем отличие от слайсов?

Если нам нужна структура данных, размер которой может меняться во время выполнения программы (добавление/удаление элементов), мы используем слайсы (slices).

Разница в синтаксисе:

  • [...]int{1, 2, 3} — это массив фиксированного размера [3]int. Добавить 4-й элемент в него нельзя (размер зашит в тип).
  • []int{1, 2, 3} — это слайс. У него под капотом скрыт массив, но сам слайс может динамически расти с помощью append().

Итог:

Для массивов ... существует, и он имеет смысл: это синтаксический сахар для автоматического вычисления размера массива на этапе компиляции. Он не нарушает правило о фиксированности массивов, а лишь автоматизирует их создание.

Оператор многоточие в Golang

Строго говоря, с точки зрения формальной спецификации языка Go, ... не является оператором (в отличие от +, =, <- и т.д.).Официально э...… Continue reading

Что такое os.File

Published on September 21, 2026