카테고리 없음
[Go언어] defer 지연 실행
코드베어
2022. 11. 20. 16:29
함수 종료 전에 처리 해야 하는 코드가 있을 때 defer를 사용하면 된다.
파일핸들 반환 등에 사용하면 자칫 OS자원 사용 후 반환하지 않는 실수를 줄일 수 있다.
func main() {
f, err := os.Create("test.txt")
if err != nil {
fmt.Println("Failed to create file")
return
}
defer fmt.Println("defer 1 !")
defer fmt.Println("defer 2 !")
defer f.Close() // main() 함수 종료 직전에 실행하여 파일 핸들 반환한다.
defer fmt.Println("defer 3 !")
}
// 출력 순서
defer 3 !
// f.close() 실행
defer 2 !
defer 1 !
os.Create 함수로 파일 핸들을 받고 main함수가 종료되기 전에 f.Close()를 통해 자원을 반환한다.
위 출력 결과를 보면 마지막에 선언한 defer 3 ! 부터 호출되는 것을 볼 수 있다. 이처럼 defer는 선언한 순서의 역순으로 호출되는 것을 알 수 있다.