nugawiki

./categories/back-end

Go defer·panic·recover

업데이트 2026-07-21 조회수

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()
}

./comments