74 lines
1.4 KiB
Go
74 lines
1.4 KiB
Go
![]() |
// For more tutorials: https://blog.learngoprogramming.com
|
||
|
//
|
||
|
// Copyright © 2018 Inanc Gumus
|
||
|
// Learn Go Programming Course
|
||
|
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||
|
//
|
||
|
|
||
|
package main
|
||
|
|
||
|
import "fmt"
|
||
|
|
||
|
func main() {
|
||
|
nums := []int{2, 3, 7}
|
||
|
fmt.Printf("nums : %d\n", nums)
|
||
|
|
||
|
n := avgNoVariadic(nums)
|
||
|
fmt.Printf("avgNoVariadic : %d\n", n)
|
||
|
|
||
|
n = avg(2, 3, 7)
|
||
|
fmt.Printf("avg(2, 3, 7) : %d\n", n)
|
||
|
|
||
|
n = avg(2, 3, 7, 8)
|
||
|
fmt.Printf("avg(2, 3, 7, 8) : %d\n", n)
|
||
|
|
||
|
// use ... to pass a slice
|
||
|
n = avg(nums...)
|
||
|
fmt.Printf("avg(nums...) : %d\n", n)
|
||
|
|
||
|
// uses the existing slice
|
||
|
double(nums...)
|
||
|
fmt.Printf("double(nums...) : %d\n", nums)
|
||
|
|
||
|
// creates a new slice
|
||
|
double(4, 6, 14)
|
||
|
fmt.Printf("double(4, 6, 14): %d\n", nums)
|
||
|
|
||
|
// creates a nil slice
|
||
|
fmt.Printf("\nmain.nums : %p\n", nums)
|
||
|
investigate("passes main.nums", nums...)
|
||
|
investigate("passes main.nums", nums...)
|
||
|
investigate("passes args", 4, 6, 14)
|
||
|
investigate("passes args", 4, 6, 14)
|
||
|
investigate("no args")
|
||
|
}
|
||
|
|
||
|
func investigate(msg string, nums ...int) {
|
||
|
fmt.Printf("investigate.nums: %12p -> %s\n", nums, msg)
|
||
|
|
||
|
if len(nums) > 0 {
|
||
|
fmt.Printf("\tfirst element: %d\n", nums[0])
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func double(nums ...int) {
|
||
|
for i := range nums {
|
||
|
nums[i] *= 2
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func avg(nums ...int) int {
|
||
|
return sum(nums) / len(nums)
|
||
|
}
|
||
|
|
||
|
func avgNoVariadic(nums []int) int {
|
||
|
return sum(nums) / len(nums)
|
||
|
}
|
||
|
|
||
|
func sum(nums []int) (total int) {
|
||
|
for _, n := range nums {
|
||
|
total += n
|
||
|
}
|
||
|
return
|
||
|
}
|