지연 호출은 특정 함수를 현재 함수가 끝나기 직전에 실행하는 기능이다. Java에서의 try, catch, finally 구문에서 finally와 유사한 동작을 한다.
func hello() {
fmt.Println("Hello")
}
func world() {
fmt.Println("World")
}
func main() {
defer world() // world 함수가 나중에 호출된다.
hello()
hello()
}
Hello
Hello
World
지연 호출할 함수는 여러 개를 선언해도 되며, 이때 실행되는 순서는 LIFO이다. 따라서 맨 나중에 호출한 함수가 먼저 실행된다.
func hello() {
fmt.Println("Hello")
}
func world() {
fmt.Println("World")
}
func main() {
defer hello() // 나중에 실행
defer world() // 먼저 실행
hello()
hello()
}
Hello
Hello
World
Hello
일반적으로 Clean-up 작업을 위해 사용되며, 가장 많이 사용되는 케이스는 파일 입출력이다. 아래와 같이 파일을 연 뒤 지연 호출로 close를 호출하면 함수가 끝날 때 무조건 파일을 닫는다. 이런 방식은 특히 프로그램 흐름상 분기가 많아 에러 처리가 중복해서 나타날 때 유용하다.
func main() {
file, _ := os.Create("data.txt")
defer file.Close()
fmt.Fprint(file, 1, 1.1, "Hello, world!")
}
'Language > Golang' 카테고리의 다른 글
Golang panic(패닉)과 recover(복구): Java에서의 try-catch 구문 (0) | 2019.09.10 |
---|---|
Golang Closure (0) | 2019.09.06 |
Golang first-class function (일급함수) (0) | 2019.09.03 |
Golang 함수 (0) | 2019.09.03 |
댓글