Функции с переменным числом аргументов
Принимайте переменное количество аргументов
«Функции с переменным числом аргументов» — бесплатный урок Go Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.
Что такое вариативная функция
Вариативная функция принимает ноль или более аргументов указанного типа, собранных в срез:
func sum(nums ...int) int {
total := 0
for _, n := range nums {
total += n
}
return total
}
fmt.Println(sum(1, 2, 3, 4)) // 10Синтаксис ...T
Используйте ...T как тип последнего параметра. Внутри функции это []T:
- Функцию можно вызвать с нулём или большим количеством аргументов
- Вариативный параметр должен быть последним
- В каждой функции может быть только один вариативный параметр
Раскрытие среза
Передайте существующий срез в вариативную функцию с помощью оператора раскрытия ...:
nums := []int{1, 2, 3, 4, 5}
total := sum(nums...) // spread the slice
fmt.Println(total) // 15Функция fmt.Println является вариативной
Многие функции стандартной библиотеки являются вариативными. fmt.Println имеет сигнатуру func Println(a ...interface{}) (n int, err error) — она принимает любое количество значений любого типа.
Функция добавления является вариативной
Встроенная функция append является вариативной:
a := []int{1, 2, 3}
b := []int{4, 5, 6}
a = append(a, b...) // append all of b into a
fmt.Println(a) // [1 2 3 4 5 6]Вариативная функция с другими параметрами
Вариативные параметры идут последними. Сочетайте фиксированные и вариативные параметры:
func logf(level string, msg string, args ...interface{}) {
fmt.Printf("[%s] "+msg+"\n", append([]interface{}{level}, args...)...)
}Вызов вариативной функции без аргументов
Вариативную функцию можно вызвать без аргументов — срез будет нулевым или пустым:
fmt.Println(sum()) // 0 — nil slice, loop runs 0 timesВариативный параметр или параметр-срез
Когда использовать вариативный параметр, а когда — параметр-срез:
- Вариативный параметр: когда вызывающая сторона передаёт отдельные значения непосредственно в вызове (например,
sum(1,2,3)) - Срез: когда у вызывающей стороны уже есть готовая коллекция
- Вариативный параметр удобнее в местах вызова; внутри функции оба варианта работают одинаково хорошо
Передача вариативных аргументов другой вариативной функции
Передавайте вариативные аргументы дальше с помощью раскрытия:
func logError(args ...interface{}) {
log.Println(args...) // forward to log.Println
}Создание шаблонов параметров
Вариативный параметр ...Option — популярный шаблон для необязательной конфигурации (функциональные параметры):
type Option func(*Server)
func NewServer(addr string, opts ...Option) *Server {
s := &Server{addr: addr}
for _, o := range opts {
o(s)
}
return s
}Быстрая проверка
Как передать срез в вариативную функцию?
Итоги: вариативные функции
Вариативные функции делают места вызова лаконичными:
...Tсобирает конечные аргументы в[]Tвнутри функции- Функцию можно вызвать с отдельными значениями или раскрыть срез с помощью
slice... - Встроенные функции, такие как
appendиfmt.Println, являются вариативными - Разрешён только один вариативный параметр, и он должен быть последним
- Используйте шаблон функциональных параметров для выразительного проектирования интерфейсов
Далее: defer, анонимные функции и замыкания.
Часто задаваемые вопросы
Урок «Функции с переменным числом аргументов» бесплатный?
Да — полный текст урока «Функции с переменным числом аргументов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «Функции с переменным числом аргументов»?
Принимайте переменное количество аргументов Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Функции с переменным числом аргументов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Основы функций и сигнатуры
- Несколько возвращаемых значений
- Функции с переменным числом аргументов
- defer, анонимные функции и замыкания