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

영삼이
본문
✅ 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
예외 판단 시 인터페이스 내부 구조를 꼭 이해하고 써야 한다.
- 이전글slice를 함수에 넘기면 복사될까? 참조될까? 25.03.28
- 다음글Go의 기본값(zero value)을 믿고 초기화 안 하면 낭패 본다 25.03.28
댓글목록
등록된 댓글이 없습니다.