69 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			69 lines
		
	
	
		
			1.1 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" | ||
|  | 	"time" | ||
|  | ) | ||
|  | 
 | ||
|  | func main() { | ||
|  | 	// single() | ||
|  | 	// stacked() | ||
|  | 	findTheMeaning() | ||
|  | } | ||
|  | 
 | ||
|  | func findTheMeaningNoDefer() { | ||
|  | 	start := time.Now() | ||
|  | 	fmt.Printf("%s starts...\n", "findTheMeaning") | ||
|  | 
 | ||
|  | 	// do some heavy calculation... | ||
|  | 	time.Sleep(time.Second * 2) | ||
|  | 
 | ||
|  | 	fmt.Printf("%s took %v\n", "findTheMeaning", time.Since(start)) | ||
|  | } | ||
|  | 
 | ||
|  | func findTheMeaning() { | ||
|  | 	defer measure("findTheMeaning")() | ||
|  | 
 | ||
|  | 	// do some heavy calculation | ||
|  | 	time.Sleep(time.Second * 2) | ||
|  | } | ||
|  | 
 | ||
|  | func measure(name string) func() { | ||
|  | 	start := time.Now() | ||
|  | 	fmt.Printf("%s starts...\n", name) | ||
|  | 
 | ||
|  | 	return func() { | ||
|  | 		fmt.Printf("%s took %v\n", name, time.Since(start)) | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | func stacked() { | ||
|  | 	for count := 1; count <= 5; count++ { | ||
|  | 		defer fmt.Println(count) | ||
|  | 	} | ||
|  | 
 | ||
|  | 	fmt.Println("the stacked func returns") | ||
|  | } | ||
|  | 
 | ||
|  | func single() { | ||
|  | 	var count int | ||
|  | 
 | ||
|  | 	// defer func() { | ||
|  | 	// 	fmt.Println(count) | ||
|  | 	// }() | ||
|  | 	defer fmt.Println(count) | ||
|  | 
 | ||
|  | 	count++ | ||
|  | 	// fmt.Println(count) | ||
|  | 
 | ||
|  | 	// the defer runs here | ||
|  | 	// fmt.Println(count) | ||
|  | } |