Какой вывод получит программа №35

Фрагмент не задаёт определённого вывода и содержит ошибки оформления и управления потоком. Ключевые дефекты — пропущенный UnlockUser при успехе и break, выходящий из switch, но не из for.

Короткий ответ

Что ответить на собеседовании

Фрагмент не задаёт определённого вывода и содержит ошибки оформления и управления потоком. Ключевые дефекты — пропущенный UnlockUser при успехе и break, выходящий из switch, но не из for.

Подробный разбор

Ответ с пояснениями

Условие

Определите, какой текст будет напечатан в консоли после выполнения программы. Укажите, присутствуют ли в коде ошибки.

import java.net.IDN;

type OrderSrv struct {
    FlightSrv      BookingService
    AccountSrv     UserService
}

type UserService interface {
    LockUser(User)   error
    UnlockUser(User) error
}

type User struct {
    ID string
}

type Receipt struct {
    ID          string
    BookingCode string
    BookedAt    string
}

type BookingService interface {
    BookFlight() (string, *BookingSrvError)
}

type BookingSrvError struct {
    error
    TryAgain bool
}

func (s *OrderSrv) HandleBookingOrder(user User) *Receipt {
    receiptInfo := Receipt{ID: uuid.New().String()}

    if err := s.AccountSrv.LockUser(user); err != nil {
        log.Logger.Err(err)
        return nil
    }
    for {
        flightCode, err := s.FlightSrv.BookFlight()

        switch {
        case err == nil:
            receiptInfo.BookedAt = time.Now().Format(time.RFC3339)
            receiptInfo.BookingCode = flightCode
            return &receiptInfo
        case err.TryAgain:
        default:
            log.Logger.Err(err)
            break
        }
    }

    if err := s.AccountSrv.UnlockUser(user); err != nil {
        log.Logger.Err(err)
        return nil
    }
    return &receiptInfo
}

Ответ

Фрагмент не задаёт определённого вывода и содержит ошибки оформления и управления потоком. Ключевые дефекты — пропущенный UnlockUser при успехе и break, выходящий из switch, но не из for.

После успешного LockUser сразу организуйте гарантированную попытку UnlockUser через defer и обработку её ошибки. Неповторяемая ошибка должна завершать цикл или возвращаться, а повторяемая — иметь лимит попыток, backoff и дедлайн. Для бронирования нужен idempotency key: повтор после неопределённого сетевого результата опасен дублем. Удалите Java-import, добавьте реальные Go-зависимости и согласуйте logger. Интерфейс BookFlight без context ограничивает возможность отмены.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее