Golang : Accept any number of function arguments with three dots(...)
There are times when we need to create functions that are able to accept any number of arguments(a.k.a trailing arguments) during runtime. In Golang, this can be achieved with the three dots or better known as the variadic parameter. For instance, to calculate average value of a given range of numbers. Instead of hard coding the number of arguments to be accepted, you can make your function to be more robust and accept multiple arguments during run time.
For example:
package main
import (
"fmt"
)
func avg(rest ...float64) float64 { //<----- here!
sum := 0.0
for _, num := range rest {
sum += num
}
return float64(sum) / float64(len(rest))
}
func main() {
fmt.Printf("%0.2f\n", avg(1, 2))
fmt.Printf("%0.2f\n", avg(1, 2, 3, 4, 5, 6, 7, 8, 9))
fmt.Printf("%0.2f\n", avg(99, 98, 87, 110, 121, 2))
}
Output:
1.50
5.00
86.17
Another example to accept any number of string arguments to make a new slice:
package main
import (
"fmt"
)
func makeSlice(elements ...string) []string {
var strSlice []string
for _, str := range elements {
strSlice = append(strSlice, str)
}
return strSlice
}
func main() {
fmt.Println(makeSlice("abc", "def"))
fmt.Println(makeSlice("abc", "def", "ghi"))
fmt.Println(makeSlice("abc", "def", "xyz", "123"))
fmt.Println(makeSlice("abc"))
}
Output:
[abc def]
[abc def ghi]
[abc def xyz 123]
[abc]
Happy coding!
References:
http://stackoverflow.com/questions/19238143/does-golang-support-arguments
See also : Golang : automatically figure out array length(size) with three dots
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+8.6k Golang : Sort lines of text example
+8.8k Golang : How to find out similarity between two strings with Jaro-Winkler Distance?
+77.6k Golang : How to return HTTP status code?
+10k Golang : Simple Jawi(Yawi) to Rumi(Latin/Romanize) converter
+4.4k Linux : sudo yum updates not working
+11.6k Golang : Clean formatting/indenting or pretty print JSON result
+13.1k Golang : Read from buffered reader until specific number of bytes
+7.7k Golang : What fmt.Println() can do and println() cannot do
+3.4k Golang : Switch Redis database redis.NewClient
+10.6k PHP : Convert(cast) bigInt to string
+3.8k Detect if Google Analytics and Developer Media are loaded properly or not
+8.3k Golang : Convert(cast) []byte to io.Reader type