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