Переменная http.DefaultClient

Переменная http.DefaultClient представляет собой экземпляр клиента HTTP, который используется по умолчанию при выполнении запросов с помощью функций пакета net/http, таких как http.Get, http.Post и других. Она упрощает выполнение HTTP-запросов, освобождая разработчика от необходимости создавать собственный экземпляр клиента. Однако стоит помнить, что http.DefaultClient не имеет таймаутов по умолчанию, поэтому для продакшн-среды рекомендуется создавать собственный клиент с настроенными таймаутами.

Синтаксис

goimport "net/http"

http.DefaultClient

Пример

Давайте выполним GET-запрос с использованием http.DefaultClient и получим данные с веб-страницы:

gopackage main

import (
  "fmt"
  "io"
  "net/http"
)

func main() {
  resp, err := http.DefaultClient.Get("https://example.com")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  defer resp.Body.Close()
  
  body, err := io.ReadAll(resp.Body)
  if err != nil {
    fmt.Println("Error reading body:", err)
    return
  }
  
  fmt.Printf("Status: %s\n", resp.Status)
  fmt.Printf("Body length: %d bytes\n", len(body))
}

Результат выполнения кода:

go"Status: 200 OK"
"Body length: 1256 bytes"

Пример

Давайте создадим POST-запрос с использованием http.DefaultClient и передадим данные в формате JSON:

gopackage main

import (
  "bytes"
  "fmt"
  "io"
  "net/http"
)

func main() {
  jsonData := []byte(`{"name": "John", "age": 30}`)
  
  resp, err := http.DefaultClient.Post(
    "https://httpbin.org/post",
    "application/json",
    bytes.NewBuffer(jsonData),
  )
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  defer resp.Body.Close()
  
  body, err := io.ReadAll(resp.Body)
  if err != nil {
    fmt.Println("Error reading body:", err)
    return
  }
  
  fmt.Printf("Status: %s\n", resp.Status)
  fmt.Printf("Response: %s\n", string(body))
}

Результат выполнения кода:

go"Status: 200 OK"
"Response: {\"args\":{}, \"data\":\"{\\\"name\\\": \\\"John\\\", \\\"age\\\": 30}\", ...}"

Пример

Давайте настроим таймауты для http.DefaultClient, изменив его поле Timeout:

gopackage main

import (
  "fmt"
  "net/http"
  "time"
)

func main() {
  http.DefaultClient.Timeout = 5 * time.Second
  
  start := time.Now()
  resp, err := http.DefaultClient.Get("https://example.com")
  elapsed := time.Since(start)
  
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  defer resp.Body.Close()
  
  fmt.Printf("Status: %s\n", resp.Status)
  fmt.Printf("Time taken: %v\n", elapsed)
}

Результат выполнения кода:

go"Status: 200 OK"
"Time taken: 1.234s"

Смотрите также

  • структуру http.Client,
    которая предоставляет гибкую настройку HTTP-клиента
  • метод http.Client.Do,
    который выполняет HTTP-запрос с настраиваемым клиентом
  • переменную http.DefaultTransport,
    которая определяет транспорт по умолчанию для HTTP-клиента
  • функцию http.Get,
    которая выполняет GET-запрос через стандартный клиент