62 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
---
 | 
						|
title: Variadic Functions
 | 
						|
---
 | 
						|
 | 
						|
## Variadic Functions
 | 
						|
 | 
						|
Variadic functions are functions that can be called with any number of trailing arguments.
 | 
						|
 | 
						|
This is a useful feature when we are working on web-apps. 
 | 
						|
 | 
						|
Sometimes we are not how many elements we will need to pass to the HTML templating engine.
 | 
						|
 | 
						|
Here are the basics on how varidic functions work:
 | 
						|
 | 
						|
```go
 | 
						|
package main
 | 
						|
import "fmt"
 | 
						|
 | 
						|
func printFruits(fruits ...string) {
 | 
						|
    for _, fruit := range fruits{
 | 
						|
        fmt.Println(fruit)
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
func main() {
 | 
						|
   printFruits("apple", "bannana")
 | 
						|
   printFruits("papaya", "coconut", "pear", "pineapple")
 | 
						|
   berries := []string{"blueberry", "strawberry", "raspberry"}
 | 
						|
   printFruits(berries...)
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
First, in printFruits we defined the number of arguments with [...string].
 | 
						|
 | 
						|
This tells Go that this function accepts any number of string arguments.
 | 
						|
 | 
						|
The first two calls to printFruits shows that the function will print each string, even if we are passing a different number of arguments.
 | 
						|
 | 
						|
```text
 | 
						|
apple
 | 
						|
bannana
 | 
						|
...
 | 
						|
papaya
 | 
						|
coconut
 | 
						|
pear
 | 
						|
...
 | 
						|
```
 | 
						|
 | 
						|
This will also work for slices.
 | 
						|
 | 
						|
To use a vardiac function with a slice, we add the training dots to the call.
 | 
						|
 | 
						|
```go
 | 
						|
printFruits(berries...)
 | 
						|
```
 | 
						|
 | 
						|
```text
 | 
						|
blueberry
 | 
						|
strawberry
 | 
						|
raspberry
 | 
						|
```
 |