Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

Code Habit

[Go언어] defer 지연 실행 본문

카테고리 없음

[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는 선언한 순서의 역순으로 호출되는 것을 알 수 있다.