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