функция buildOrderEmailBody(items []Item, totalPrice float64) строка {

Вынесите формирование письма в buildOrderEmailBody: функция получает товары и готовую сумму, возвращает строку и не отправляет email. Ошибку отправки обрабатывайте отдельно.

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

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

Вынесите формирование письма в buildOrderEmailBody: функция получает товары и готовую сумму, возвращает строку и не отправляет email. Ошибку отправки обрабатывайте отдельно.

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

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

Условие

функция buildOrderEmailBody(items []Item, totalPrice float64) строка { body := "Спасибо за ваш заказ!\n\n" body += "Вот товары в вашем заказе:\n"

for _, 

}

func CreateOrder(customerEmail string) { totalPrice := ListAndCalculateVAT()

orderDetails := "Спасибо за ваш заказ!\n\n"
orderDetails += "Вот товары в вашем заказе:\n"

for _, item := range items {
    orderDetails += fmt.Sprintf("- %s: $%.2f\n", item.NameOfProduct, item.PriceOfProduct)
}

orderDetails += fmt.Sprintf("\nОбщая сумма (с учетом НДС): $%.2f\n", totalPrice)

order = Order{Items: items, EmailSent: false}
subject := "Подтверждение вашего заказа"

if err := SendOrderConfirmationEmail(customerEmail, subject, orderDetails); 
err != nil {
}

Ответ

Вынесите формирование письма в buildOrderEmailBody: функция получает товары и готовую сумму, возвращает строку и не отправляет email. Ошибку отправки обрабатывайте отдельно.

Для показанных полей Item функция может выглядеть так:

func buildOrderEmailBody(items []Item, totalPrice float64) string {
    var body strings.Builder
    body.WriteString("Спасибо за ваш заказ!\n\nВот товары в вашем заказе:\n")
    for _, item := range items {
        fmt.Fprintf(&body, "- %s: $%.2f\n", item.NameOfProduct, item.PriceOfProduct)
    }
    fmt.Fprintf(&body, "\nОбщая сумма (с учетом НДС): $%.2f\n", totalPrice)
    return body.String()
}

Нужны импорты fmt и strings. В CreateOrder следует явно получить items и проверить SendOrderConfirmationEmail: EmailSent нельзя устанавливать при ошибке. Код исходного CreateOrder неполон, поэтому контракт заказа здесь не додумывается. Для реальных денежных расчётов предпочтительны целые минимальные единицы или decimal, а не float64.

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

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

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

Подробнее