Выполнение HTTP-запросов
GET и POST с http.NewRequest и http.DefaultClient
«Выполнение HTTP-запросов» — бесплатный урок Go Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.
Краткая форма http.Get
http.Get(url) — самый простой способ выполнить GET-запрос. Всегда закрывайте тело ответа.
resp, err := http.Get("https://api.example.com/users")
if err != nil { return err }
defer resp.Body.Close()http.DefaultClient
http.Get использует DefaultClient уровня пакета. В production создавайте собственный клиент с заданными ограничениями времени ожидания.
client := &http.Client{Timeout: 10 * time.Second}
resp, err := client.Get(url)http.NewRequest для полного контроля
Используйте http.NewRequest, чтобы задать метод, заголовки и тело:
req, err := http.NewRequestWithContext(ctx, "POST", url, body)
req.Header.Set("Content-Type", "application/json")
resp, err := client.Do(req)Тело запроса
Передавайте тело запроса через io.Reader. Для данных JSON используйте bytes.NewBuffer(data) или strings.NewReader.
data, _ := json.Marshal(payload)
req, _ := http.NewRequestWithContext(ctx, "POST", url, bytes.NewBuffer(data))Проверка состояния ответа
Всегда проверяйте код состояния HTTP — по умолчанию код 4xx/5xx не возвращается как ошибка Go.
if resp.StatusCode != http.StatusOK {
return fmt.Errorf("unexpected status: %d", resp.StatusCode)
}Декодирование ответа JSON
Декодируйте тело ответа с помощью json.Decoder, чтобы сначала не читать его целиком в память:
var result APIResponse
json.NewDecoder(resp.Body).Decode(&result)Параметры запроса
Создавайте строки запроса с помощью url.Values и добавляйте их к URL:
params := url.Values{}
params.Set("page", "1")
params.Set("limit", "20")
reqURL := baseURL + "?" + params.Encode()Client.Do и пользовательский транспорт
Оберните http.DefaultTransport, чтобы добавить логику повторных попыток, пользовательские настройки TLS или прокси, не теряя поведение по умолчанию.
Тело ответа необходимо закрывать
Если не закрыть тело ответа, базовое TCP-соединение останется занятым. Всегда используйте defer resp.Body.Close(), даже для ответов с ошибками.
Обработка перенаправлений
Клиент по умолчанию выполняет до 10 перенаправлений. Задайте client.CheckRedirect, чтобы настроить или отключить переходы по перенаправлениям.
Настройка User-Agent
Задайте описательный заголовок User-Agent, чтобы журналы сервера могли идентифицировать ваш клиент:
req.Header.Set("User-Agent", "myapp/1.0 (+https://myapp.com)")Быстрая проверка
Почему следует всегда закрывать тело HTTP-ответа?
Итоги: выполнение HTTP-запросов
Ключевые моменты:
- Всегда откладывайте вызов resp.Body.Close() с помощью defer
- Создавайте собственный http.Client с Timeout для production
- Используйте http.NewRequestWithContext для работы с контекстом и пользовательскими заголовками
- Проверяйте resp.StatusCode — ошибки HTTP не являются ошибками Go
Часто задаваемые вопросы
Урок «Выполнение HTTP-запросов» бесплатный?
Да — полный текст урока «Выполнение HTTP-запросов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «Выполнение HTTP-запросов»?
GET и POST с http.NewRequest и http.DefaultClient Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Выполнение HTTP-запросов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Выполнение HTTP-запросов
- Настройка тайм-аутов и заголовков
- Декодирование ответов JSON
- Обработка ошибок и логика повторных попыток