개발 지식

개발 지식

Go panic/recover는 예외 처리용이 아니다

페이지 정보

profile_image
영삼이
0건 107회 25-03-28 15:07

본문

✅ panic/recover는 예외 처리용이 아니다

복구 불가능한 상황에만 써야 한다

Go에는 panic()recover()로 예외처럼 보이는 구조가 있다:

func risky() {
	panic("무언가 잘못됨")
}
func safe() {
	defer func() {
		if r := recover(); r != nil {
			fmt.Println("복구:", r)
		}
	}()
	risky()
}

❌ 문제 상황

  • panic을 자주 쓰면 흐름 제어가 어려워지고

  • recover중간 상태를 망가뜨릴 수 있음

  • 실제로는 예외 처리와 다르게 작동 (스택, 자원 해제, 복구 불완전)


✅ Go에서 에러 처리의 기본은 error

func do() error {
	if somethingWrong {
		return errors.New("문제 발생")
	}
	return nil
}
  • 명시적 처리

  • 흐름 제어 가능

  • 예상 가능한 동작


✔️ panic/recover는 정말 복구 불가능한 경우에만
예: 초기화 실패, 프로그래밍 오류
정상적인 예외 처리에는 절대 사용하지 말자.

댓글목록

등록된 댓글이 없습니다.