Переменная ошибки может иметь тип (например, *MyError), но значение nil. Тогда интерфейс (тип, значение) не nil, и err != nil истинно. Нужно возвращать return nil вместо return err когда err nil, либо проверять через errors.Is(err, nil) или по типу errors.As.