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