Вариативные функции в Go позволяют передавать функции переменное количество аргументов. Эта функция полезна, когда вы заранее не знаете, сколько аргументов вам предстоит передать. Вариативная функция Golang принимает несколько аргументов одного типа и может быть вызвана с любым количеством аргументов, в том числе и без них.

package main
import "fmt"
// Hàm Variadic tính tổng
func sum(nums ...int) int {
total := 0
for _, n := range nums {
total += n
}
return total
}
func main() {
fmt.Println("Sum of 1, 2, 3:", sum(1, 2, 3))
fmt.Println("Sum of 4, 5:", sum(4, 5))
fmt.Println("Sum of no numbers:", sum())
}
Результат:
Sum of 1, 2, 3: 6
Sum of 4, 5: 9
Sum of no numbers: 0
Синтаксис:
func functionName(parameters ...Type) ReturnType {
// Code
}
В приведенном выше синтаксисе:
parameters ...Type
указывает, что функция может принимать переменное количество аргументов типа Type.
- Вы можете получить доступ к аргументам функции как к срезу.
Как использовать неопределенные функции в Golang
Использование вариативных функций
При определении вариативной функции указывается тип аргумента, за которым следует многоточие (...), как в примере выше. Внутри функции эти аргументы можно рассматривать как срез.
Вызов вариативной функции
Вы можете вызвать вариативную функцию с любым количеством аргументов, включая ноль. Эта функция обрабатывает аргументы как срез.
Например:
package main
import "fmt"
func sum(nums ...int) int {
total := 0
for _, n := range nums {
total += n
}
return total
}
func main() {
fmt.Println("Sum of 1, 2, 3:", sum(1, 2, 3))
fmt.Println("Sum of 4, 5:", sum(4, 5))
fmt.Println("Sum of no numbers:", sum())
}
Результат:
Sum of 1, 2, 3: 6
Sum of 4, 5: 9
Sum of no numbers: 0
Вариативная функция с различными параметрами
В функции также можно комбинировать переменные параметры с обычными параметрами. Вариативные параметры всегда должны быть последними.
Например:
package main
import "fmt"
// Hàm Variadic tính tổng
func sum(nums ...int) int {
total := 0
for _, n := range nums {
total += n
}
return total
}
// Hàm với tham số thông thường và variadic
func greet(prefix string, nums ...int) {
fmt.Println(prefix)
for _, n := range nums {
fmt.Println("Number:", n)
}
}
func main() {
greet("Sum of numbers:", 1, 2, 3)
greet("Another sum:", 4, 5)
greet("No numbers sum:")
}
Результат:
Sum of numbers:
Number: 1
Number: 2
Number: 3
Another sum:
Number: 4
Number: 5
No numbers sum:
Ограничения вариативных функций
- Вариативные функции могут иметь только один вариативный параметр, и он должен быть последним параметром.
- В одном определении функции не может быть нескольких переменных параметров.