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
- http
- Python
- Sync
- package
- API
- Callback
- range
- JavaScript
- go언어
- write
- install
- C
- channel
- 영화
- 책
- go
- windows
- bitcoin
- mutex
- json
- c++
- window
- GO 언어
- Golang
- FOR
- Close
- 리뷰
- tcp
- Linux
- File
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는 선언한 순서의 역순으로 호출되는 것을 알 수 있다.