Functions and Methods
Variadic Functions
Variadic functions accept any number of values for one parameter.
variadic parameter
A parameter written with `...` accepts zero or more values.
Variadic Functions
variadic_functions.go
Replay: real traced execution (multi-file project)
package main
import "fmt"
func sum(values ...int) int {
total := 0
for _, value := range values {
total += value
}
return total
}
func main() {
var bonus = 5
values := []int{2, 3, bonus}
total := sum(values...)
fmt.Println("values=", values)
fmt.Println("total=", total)
}
package main
import "fmt"
func sum(values ...int) int {
total := 0
for _, value := range values {
total += value
}
return total
}
func main() {
var bonus = 0
values := []int{2, 3, bonus}
total := sum(values...)
fmt.Println("values=", values)
fmt.Println("total=", total)
}
package main
import "fmt"
func sum(values ...int) int {
total := 0
for _, value := range values {
total += value
}
return total
}
func main() {
var bonus = 10
values := []int{2, 3, bonus}
total := sum(values...)
fmt.Println("values=", values)
fmt.Println("total=", total)
}
bonus ← 5, values ← []int{2, 3, 5}
13func main() {14 var bonus→ 5 = 5 //@bonus=0, 1015 values→ []int{2, 3, 5} := []int{2, 3, bonus5}16 total := sum(values[]int{2, 3, 5}...)total ← 0
5func sum(values[]int{2, 3, 5} ...int) int {6 total→ 0 := 07 for _, value := range values {total ← 2
pass 1 of 36total := 07for _, value2 := range values[]int{2, 3, 5} {8 total→ 2 += value29}All 3 passes — pass 1 is the card above pass valuetotal1 2 0 → 2 2 3 2 → 5 3 5 5 → 10 return total
9 }10 return total1011}total ← 10
15 values := []int{2, 3, bonus}16 total→ 10 := sum(values[]int{2, 3, 5}...)1718 fmt.Println("values=", values[]int{2, 3, 5})19 fmt.Println("total=", total10)20}outputvalues= [2 3 5] total= 10
bonus ← 0, values ← []int{2, 3, 0}
13func main() {14 var bonus→ 0 = 015 values→ []int{2, 3, 0} := []int{2, 3, bonus0}16 total := sum(values[]int{2, 3, 0}...)total ← 0
5func sum(values[]int{2, 3, 0} ...int) int {6 total→ 0 := 07 for _, value := range values {total ← 2
pass 1 of 36total := 07for _, value2 := range values[]int{2, 3, 0} {8 total→ 2 += value29}All 3 passes — pass 1 is the card above pass valuetotal1 2 0 → 2 2 3 2 → 5 3 0 5 return total
9 }10 return total511}total ← 5
15 values := []int{2, 3, bonus}16 total→ 5 := sum(values[]int{2, 3, 0}...)1718 fmt.Println("values=", values[]int{2, 3, 0})19 fmt.Println("total=", total5)20}outputvalues= [2 3 0] total= 5
bonus ← 10, values ← []int{2, 3, 10}
13func main() {14 var bonus→ 10 = 1015 values→ []int{2, 3, 10} := []int{2, 3, bonus10}16 total := sum(values[]int{2, 3, 10}...)total ← 0
5func sum(values[]int{2, 3, 10} ...int) int {6 total→ 0 := 07 for _, value := range values {total ← 2
pass 1 of 36total := 07for _, value2 := range values[]int{2, 3, 10} {8 total→ 2 += value29}All 3 passes — pass 1 is the card above pass valuetotal1 2 0 → 2 2 3 2 → 5 3 10 5 → 15 return total
9 }10 return total1511}total ← 15
15 values := []int{2, 3, bonus}16 total→ 15 := sum(values[]int{2, 3, 10}...)1718 fmt.Println("values=", values[]int{2, 3, 10})19 fmt.Println("total=", total15)20}outputvalues= [2 3 10] total= 15