Строго говоря, с точки зрения формальной спецификации языка Go, ... не является оператором (в отличие от +, =, <- и т.д.).
Официально это называется многоточием (ellipsis) и представляет собой специальный токен (знак препинания/символ), который используется в определенных синтаксических конструкциях. Однако среди разработчиков в неформальном общении его часто называют “оператором” для удобства.
Вот 4 основные ситуации, где используется ... в Go:
1. Вариативные функции (Variadic functions)
Используется при объявлении функции, чтобы указать, что она может принимать произвольное количество аргументов указанного типа:
func sum(nums ...int) int {
// nums внутри функции представляет собой слайс []int
total := 0
for _, n := range nums {
total += n
}
return total
}2. Распаковка слайса (Slice unpacking / spread)
Используется при вызове функции, чтобы передать элементы слайса как отдельные аргументы (аналог spread-оператора в JavaScript или Python):
nums := []int{1, 2, 3}
// Распаковываем слайс nums и передаем его элементы в функцию sum
sum(nums...)3. Автоматическое определение размера массива
Используется при объявлении массива, чтобы компилятор сам посчитал количество элементов (вместо того чтобы писать цифру вручную):
// Компилятор сам поймет, что размер массива равен 3
arr := [...]int{10, 20, 30} 4. Использование в утилите go (командная строка)
Хотя это не относится к самому языку Go, можно часто встретить ... при работе с консольными командами.
Оно означает “во всех пакетах, включая вложенные”:
go test ./... # запустить тесты во всех пакетах текущей директории и поддиректориях
go mod tidy ./...Итог: Технически это не оператор, а синтаксический токен многоточия, но по смыслу оно выполняет роль оператора распаковки/группировки.`