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 | ||
|  | ``` |