진짜 반나절 날렸습니다. 함수에서 에러 없을 때 nil을 리턴하도록 짰는데 호출부에서 err == nil 체크가 계속 false로 떨어져요. 아래처럼 최소 재현 코드 만들어봤습니다.
type MyError struct{}
func (e *MyError) Error() string { return "boom" }
func do() error {
var p *MyError = nil
return p
}
func main() {
err := do()
fmt.Println(err == nil) // false
분명 p는 nil인데 왜 err == nil이 false가 되는 걸까요? do()가 리턴하는 순간 뭔가 바뀌는 느낌인데 감이 안 잡히네요. 혹시 인터페이스 반환 타입이 문제인가 싶기도 하고요. 아시는 분 설명 좀 부탁드려요.