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