개발 지식

개발 지식

Go nil 인터페이스는 진짜 nil이 아닐 수 있다

페이지 정보

profile_image
영삼이
0건 110회 25-03-28 15:09

본문

nil 인터페이스는 진짜 nil이 아닐 수 있다

값은 없는데 타입이 있으면 nil != nil

Go에서 인터페이스는 값과 타입 두 부분으로 구성된다.
이게 종종 예상 못한 버그로 이어진다:


❌ 문제 상황

var err error = (*MyError)(nil)
if err != nil {
	fmt.Println("에러 있음") // 실행됨!
}
  • err는 인터페이스 타입

  • 내부 값은 nil인데 타입 정보는 존재

  • 그래서 err != nil 판별됨


✅ 해결: 인터페이스 할당 전 체크

var e *MyError = nil
var err error = e
fmt.Println(err == nil) // false ❌
if e == nil {
	err = nil // 명시적으로 nil 할당
}

✔️ Go에서 인터페이스는
값과 타입 둘 다 nil이어야 진짜 nil
예외 판단 시 인터페이스 내부 구조를 꼭 이해하고 써야 한다.

댓글목록

등록된 댓글이 없습니다.