> Как программа определяет URL для выполнения запросов по списку (Go)

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

Компании: Ozon

Стек: Go

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

В Go программа обычно определяет URL для выполнения запросов по списку через конфигурацию (например, YAML, JSON, переменные окружения) или программное формирование на основе шаблонов. Рассмотрим типичный подход:

  1. Конфигурация списка URL: URL хранятся в структуре, загружаемой из файла или env:

    GO
    type Config struct {
    Endpoints []string `yaml:"endpoints"`
    }
    // Загрузка из YAML
    var cfg Config
    data, _ := os.ReadFile("config.yaml")
    yaml.Unmarshal(data, &cfg)
  2. Динамическое формирование: URL собирается из базового адреса и параметров:

    GO
    baseURL := "https://api.example.com"
    endpoints := []string{"users", "posts", "comments"}
    for _, ep := range endpoints {
    fullURL := fmt.Sprintf("%s/%s", baseURL, ep)
    // Выполнение запроса
    }
  3. Использование net/url: Для сложных запросов с query-параметрами:

    GO
    u, _ := url.Parse("https://api.example.com/items")
    q := u.Query()
    q.Set("list", "active")
    u.RawQuery = q.Encode()
    // u.String() -> https://api.example.com/items?list=active
  4. Пакетный запрос: Для списка URL используется sync.WaitGroup или errgroup для параллельной обработки:

    GO
    var wg sync.WaitGroup
    for _, url := range urls {
    wg.Add(1)
    go func(u string) {
    defer wg.Done()
    resp, _ := http.Get(u)
    // обработка
    }(url)
    }
    wg.Wait()

Таким образом, программа либо берет готовый список URL из конфигурации, либо генерирует их на лету, а затем выполняет запросы параллельно или последовательно.

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

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