package main
import "fmt"
func ex_f1() {
	fmt.Println("f1 : start")
	defer ex_f2() //마지막에 호출
	fmt.Println("f1 : end")
}
func ex_f2() {
	fmt.Println("f2 : called")
}
func main() {
	//Defer 함수 실행(지연)
	//Defer를 호출한 함수가 종료되기 직전에 호출 된다.
	//타 언어의 Finally 문과 비슷
	//주로 리소스 반환 등에 사용
	//예제1
	ex_f1()
}
$ f1 : start
$ f1 : end
$ f2 : called
package main
import "fmt"
func sayHello(msg string) {
	defer func() {
		fmt.Println(msg)
	}()
	func() {
		fmt.Println("Hi ")
	}()
}
func main() {
	//예제1
	sayHello("Golang!")
}
$ Hi
$ Golang
package main
import "fmt"
func stack() {
	for i := 1; i <= 10; i++ {
		defer fmt.Println("ex1 : ", i)
	}
}
func main() {
	//예제1
	stack()
}
$ ex1 : 10
$ ex1 : 9
$ ex1 : 8
$ ex1 : 7
$ ex1 : 6
$ ex1 : 5
$ ex1 : 4
$ ex1 : 3
$ ex1 : 2
$ ex1 : 1
package main
import "fmt"
func start(t string) string {
	fmt.Println("start:", t)
	return t
}
func end(t string) {
	fmt.Println("end:", t)
}
func a() {
	defer end(start("b"))
	fmt.Println("in a")
}
func main() {
	//예제1
	a()
}