Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- 영화
- 책
- install
- go
- JavaScript
- json
- mutex
- Python
- windows
- GO 언어
- c++
- C
- Callback
- range
- 리뷰
- Sync
- go언어
- API
- write
- window
- http
- bitcoin
- Close
- File
- FOR
- package
- Linux
- Golang
- channel
- tcp
Archives
- Today
- Total
Code Habit
[Go언어] defer 지연 실행 본문
함수 종료 전에 처리 해야 하는 코드가 있을 때 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는 선언한 순서의 역순으로 호출되는 것을 알 수 있다.