Фрагмент не задаёт определённого вывода и содержит ошибки оформления и управления потоком. Ключевые дефекты — пропущенный UnlockUser при успехе и break, выходящий из switch, но не из for.
Какой вывод получит программа №35
Фрагмент не задаёт определённого вывода и содержит ошибки оформления и управления потоком. Ключевые дефекты — пропущенный 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 ограничивает возможность отмены.