> Как архитектурно передавать на фронт сложную структуру с вложенными полями и массивами (Go)

Уровень: senior · Роль: backend · Категория: Технические вопросы

Компании: Wildberries

Стек: Go

> Пример ответа

Для передачи сложных вложенных структур на фронт в Go-бэкенде оптимальным подходом является использование JSON-сериализации с явным определением DTO (Data Transfer Objects). Основные рекомендации:

  1. Определите DTO-структуры - создайте отдельные типы для ответов API, избегая прямого использования моделей БД. Это позволяет контролировать, какие поля и как попадают на фронт.

    GO
    type UserResponse struct {
    ID int `json:"id"`
    Name string `json:"name"`
    Address AddressDTO `json:"address"`
    Orders []OrderDTO `json:"orders"`
    }
    type AddressDTO struct {
    City string `json:"city"`
    Street string `json:"street"`
    }
    type OrderDTO struct {
    ID int `json:"id"`
    Total float64 `json:"total"`
    Items []ItemDTO `json:"items"`
    }
  2. Используйте теги json для точного контроля имен полей, пропуска нулевых значений (omitempty) и обработки вложенности.

  3. Применяйте кастомную сериализацию для сложных преобразований (например, flattening или агрегация данных) через реализацию интерфейса json.Marshaler.

  4. Избегайте циклических ссылок - используйте ID вместо полных объектов, если необходимо сослаться на связанные сущности.

  5. Для больших вложенных массивов рассмотрите пагинацию на уровне API, передавая только часть данных.

Пример контроллера:

GO
func GetUser(w http.ResponseWriter, r *http.Request) {
user := fetchUserFromDB()
orders := fetchOrdersWithItems(user.ID)
resp := UserResponse{
ID: user.ID,
Name: user.Name,
Address: AddressDTO{
City: user.Address.City,
Street: user.Address.Street,
},
Orders: mapOrdersToDTO(orders),
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(resp)
}

Такой подход гарантирует четкий контракт между бэкендом и фронтом, упрощает тестирование и поддержку.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью