GO · 에러처리
패닉과 복구
panic은 치명적 에러, recover는 패닉을 잡아 정상 흐름으로 복귀합니다.
에러처리중급panicrecoverdefererror-handling
핵심 설명
panic은 치명적 에러, recover는 패닉을 잡아 정상 흐름으로 복귀합니다.
Go code
package main
import "fmt"
// recover는 반드시 defer에서 호출
func safeDiv(a, b int) (result int, err error) {
defer func() {
if r := recover(); r != nil {
err = fmt.Errorf("패닉 복구: %v", r)
}
}()
return a / b, nil // b==0이면 패닉
}
// 미들웨어에서 패닉 복구
func withRecover(fn func()) {
defer func() {
if r := recover(); r != nil {
fmt.Printf("복구됨: %v\n", r)
}
}()
fn()
}
func main() {
result, err := safeDiv(10, 0)
if err != nil {
fmt.Println(err) // 패닉 복구: runtime error: integer divide by zero
} else {
fmt.Println(result)
}
withRecover(func() {
panic("의도적 패닉!")
})
fmt.Println("프로그램 계속 실행")
}학습 팁
HTTP 서버의 미들웨어에서 recover를 사용하면 하나의 요청 패닉이 전체 서버를 중단시키지 않습니다.
주의할 점
panic은 정상적인 에러 처리에 사용하면 안 됩니다. 프로그래머 에러(불가능한 상태)에만 사용하세요.
자주 묻는 질문
패닉과 복구란 무엇인가요?
panic 은 치명적 에러, recover 는 패닉을 잡아 정상 흐름으로 복귀합니다.
패닉과 복구 학습 시 주의할 점은 무엇인가요?
panic 은 정상적인 에러 처리에 사용하면 안 됩니다. 프로그래머 에러(불가능한 상태)에만 사용하세요.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.