Функция http.Get

Функция http.Get выполняет HTTP GET-запрос по указанному URL-адресу. Она принимает один параметр - строку с адресом ресурса, и возвращает два значения: указатель на http.Response и ошибку error. При успешном выполнении ответ необходимо закрывать с помощью вызова defer resp.Body.Close().

Синтаксис

goresp, err := http.Get(url)

Пример

Давайте выполним GET-запрос к тестовому API и выведем статус ответа:

gopackage main

import (
  "fmt"
  "net/http"
)

func main() {
  resp, err := http.Get("https://httpbin.org/get")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  defer resp.Body.Close()

  fmt.Println("Status:", resp.Status)
}

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

go"Status: 200 OK"

Пример

Прочитаем тело ответа как строку с помощью io.ReadAll:

gopackage main

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

func main() {
  resp, err := http.Get("https://httpbin.org/get")
  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.Println(string(body))
}

Результат выполнения кода (сокращенный):

go"{\n  \"args\": {}, \n  \"headers\": {...}, \n  \"origin\": \"...\", \n  \"url\": \"https://httpbin.org/get\"\n}"

Пример

Обработаем возможную ошибку при запросе к несуществующему ресурсу:

gopackage main

import (
  "fmt"
  "net/http"
)

func main() {
  resp, err := http.Get("https://example.invalid")
  if err != nil {
    fmt.Println("Request failed:", err)
    return
  }
  defer resp.Body.Close()

  fmt.Println("Status:", resp.Status)
}

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

go"Request failed: Get \"https://example.invalid\": dial tcp: lookup example.invalid: no such host"

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

  • функцию http.Post,
    которая выполняет POST-запрос с телом
  • функцию http.PostForm,
    которая отправляет данные формы методом POST
  • функцию http.Head,
    которая выполняет HEAD-запрос (получает только заголовки)
  • тип http.Client,
    который предоставляет более гибкую настройку запросов