Funkcje zmienne w języku Go umożliwiają przekazywanie zmiennej liczby argumentów do funkcji. Funkcja ta jest przydatna, gdy nie wiesz z góry, ile argumentów przekażesz. Funkcja zmienna języka Go akceptuje wiele argumentów tego samego typu i może być wywołana z dowolną liczbą argumentów, również z brakiem argumentów.

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())
}
Wynik:
Sum of 1, 2, 3: 6
Sum of 4, 5: 9
Sum of no numbers: 0
Składnia:
func functionName(parameters ...Type) ReturnType {
// Code
}
W powyższej składni:
parameters ...Type
oznacza, że funkcja może zaakceptować zmienną liczbę argumentów typu Typ.
- Do argumentów funkcji można uzyskać dostęp jako do wycinka.
Jak używać niepewnych funkcji w Golangu
Korzystanie z funkcji wariadycznych
Definiując funkcję wariadyczną, należy określić typ argumentu, po którym następuje wielokropek (...), jak w przykładzie powyżej. Wewnątrz funkcji argumenty te można traktować jako wycinek.
Wywoływanie funkcji wariadycznej
Funkcję wariadyczną można wywołać z dowolną liczbą argumentów, łącznie z zerem. Funkcja ta traktuje argumenty jako wycinek.
Na przykład:
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())
}
Wynik:
Sum of 1, 2, 3: 6
Sum of 4, 5: 9
Sum of no numbers: 0
Funkcja wariadyczna z różnymi parametrami
W jednej funkcji można również łączyć parametry zmienne ze zwykłymi parametrami. Parametry zmienne muszą zawsze być ostatnim parametrem.
Na przykład:
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:")
}
Wynik:
Sum of numbers:
Number: 1
Number: 2
Number: 3
Another sum:
Number: 4
Number: 5
No numbers sum:
Ograniczenia funkcji wariadycznych
- Funkcje zmienne mogą mieć tylko jeden parametr zmienny i musi to być ostatni parametr.
- W jednej definicji funkcji nie można mieć wielu parametrów zmiennych.