awesome-patterns/defer/main.go
2018-01-12 15:02:10 +10:00

30 lines
829 B
Go

package main
import "fmt"
// Sample code is taken from online tutorial https://blog.learngoprogramming.com/gotchas-of-defer-in-go-1-8d070894cb01
// it demostrate all the common GOTCHA when using defer.
// If a deferred func evaluates to nil, execution panic when surrounding func ends not when defer is called
func nilFuncDefer() {
var run func() = nil
defer run()
fmt.Println("runs")
}
// Do not use defer inside a loop unless you are sure about what you are doing. It may not work as expected.
// However, in some situations it will be handy for instance,delegating the recursivity of a func to a defer.
func deferInsideLoop() {
nums := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}
for _, v := range nums {
defer func(v int) {
fmt.Println(v)
}(v)
}
}
func main() {
// nilFuncDefer()
deferInsideLoop()
}