./categories/back-end
Go defer·panic·recover
defer — 지연 실행
함수 리턴 직전 실행(정리·Close 등).
f, err := os.Open("1.txt")
if err != nil {
panic(err)
}
defer f.Close() // 함수 종료 직전
panic — 즉시 중단
현재 함수 중단 → 등록된 defer 실행 → 콜스택 전파 → 미복구 시 프로세스 종료.
func openFile(fn string) {
f, err := os.Open(fn)
if err != nil {
panic(err)
}
defer f.Close()
}
recover — panic 복구
defer 안에서 호출하면 panic을 잡고 계속 진행.
func openFile(fn string) {
defer func() {
if r := recover(); r != nil {
fmt.Println("OPEN ERROR", r)
}
}()
f, err := os.Open(fn)
if err != nil {
panic(err)
}
defer f.Close()
}
관련 링크: http://golang.site/go/article/20-Go-defer%EC%99%80-panic
./comments