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