DEFER
package main
import "fmt"
func main() {
defer fmt.Println("world")
fmt.Println("hello")
}
- 함수 실행이 끝날때 까지 실행되지 않는 구문이다. 위의 예제를 보면 world를 프린트하는 기능이 앞에 있지만, 실제로 hello가 먼저 실행된다.
package main
import "fmt"
func main() {
fmt.Println("counting")
for i := 0; i < 10; i++ {
defer fmt.Println(i)
}
fmt.Println("done")
}
- 위와 같이 여러번 호출된 경우는 가장 나중에 사용된 defer구문부터 실행된다. 위 예제에서는 9,8,7,6... 이순서로 함수가 끝나는 순간에 프린트 된다.
- 반드시 마지막에 실행되어야 하는 구문이 있는 경우, 앞에 미리 호출 해 넣고 그 사이에 넣어야할 로직들을 코딩하면 된다.
- 이런방식으로 코드를 작성하면 , 파일을 안닫거나, 리소스를 해제하는 일등을 중간 로직을 넣다가 까먹고 안하는 경우를 피할 수 있다.