Go > Core Go Basics > Functions > Variadic functions
Go Variadic Functions: Summing Numbers
This snippet demonstrates how to use variadic functions in Go to sum an arbitrary number of integers. Variadic functions allow you to pass a variable number of arguments to a function, making it more flexible and reusable.
Basic Variadic Function Definition
This code defines a function named 'sum' that accepts a variable number of integer arguments using the '...' syntax. Inside the function, we iterate over the 'numbers' parameter (which is actually a slice of integers) and accumulate their sum. The 'main' function demonstrates how to call the 'sum' function with different numbers of arguments, including an empty argument list and a slice of integers using the '...' operator to unpack the slice.
package main
import "fmt"
// sum takes a variable number of integers and returns their sum.
func sum(numbers ...int) int {
total := 0
for _, num := range numbers {
total += num
}
return total
}
func main() {
res1 := sum(1, 2, 3)
fmt.Println("Sum (1, 2, 3):", res1)
res2 := sum(4, 5, 6, 7, 8)
fmt.Println("Sum (4, 5, 6, 7, 8):", res2)
res3 := sum()
fmt.Println("Sum (no arguments):", res3)
nums := []int{10, 20, 30}
res4 := sum(nums...)
fmt.Println("Sum (slice):", res4)
}
Concepts Behind Variadic Functions
Variadic functions are a powerful feature in Go that enables a function to accept any number of trailing arguments of the same type. The '...' syntax indicates that the last parameter of the function can accept zero or more arguments of that type. Inside the function, the variadic parameter is treated as a slice.
Real-Life Use Case: Logging
A common real-life use case for variadic functions is in logging libraries. Consider a logging function that needs to format a message with a variable number of arguments. The 'fmt.Printf' function is a variadic function, and custom logging functions often mimic its behavior.
Best Practices
Interview Tip
Be prepared to explain how variadic functions work, how they are represented internally as slices, and when it is appropriate to use them versus other alternatives. You should also be able to discuss the potential performance implications.
When to Use Them
Use variadic functions when you need a function that can accept a varying number of arguments of the same type, and the number of arguments is not known at compile time. They are particularly useful for functions that perform aggregation or formatting operations.
Memory Footprint
Each time a variadic function is called, a new slice is created to hold the arguments passed. If many arguments are passed frequently, this could potentially lead to increased memory allocation. For performance-critical applications, consider alternatives like passing a pre-allocated slice.
Alternatives
Pros
Cons
FAQ
-
Can a function have multiple variadic parameters?
No, a Go function can only have one variadic parameter, and it must be the last parameter in the function signature. -
What happens if I pass no arguments to a variadic function?
If you pass no arguments to a variadic function, the variadic parameter will be an empty slice (length 0). -
How do I pass a slice as a variadic argument?
You can pass a slice as a variadic argument by using the '...' operator after the slice variable name, like this: 'myFunction(mySlice...)'.