Cliente HTTP para Go (Golang): principais bibliotecas para trabalhar com HTTP

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Cliente HTTP para Go (Golang): visão geral e comparação das melhores bibliotecas



Go (Golang) é uma das linguagens mais populares para criar serviços web de alta carga, microsserviços e integrações de API. Trabalhar com requisições HTTP é uma tarefa básica de praticamente qualquer backend. Na biblioteca padrão do Go já existe um pacote poderoso net/http, mas para cenários complexos (retentativas automáticas, pools de conexão, interface fluente conveniente) foram desenvolvidas bibliotecas especializadas. Neste artigo, analisaremos os principais clientes HTTP para Go: suas características, desempenho e exemplos de uso.



1. Padrão net/http — a base de tudo



O pacote net/http é embutido no Go e não requer instalação. Ele cobre completamente as necessidades básicas: envio de requisições GET/POST, trabalho com cabeçalhos, cookies, timeouts. No entanto, para uso avançado (por exemplo, pool de conexões com configurações) é necessária configuração manual do http.Transport.



package main

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

func main() { client := &http.Client{ Timeout: 10 * time.Second, Transport: &http.Transport{ MaxIdleConns: 100, IdleConnTimeout: 90 * time.Second, DisableCompression: false, }, }

resp, err := client.Get("https://api.github.com") if err != nil { panic(err) } defer resp.Body.Close()

body, _ := io.ReadAll(resp.Body) fmt.Println("Status:", resp.StatusCode) fmt.Println("Body length:", len(body))}


Vantagens: dependência zero, controle total, suporte a HTTP/2, middleware embutido através de wrappers RoundTripper.

Desvantagens: código verboso para requisições simples, sem interface fluente, difícil configurar retentativas e desserialização de JSON.



2. resty — cliente REST simples e elegante



A biblioteca resty (instalação: go get github.com/go-resty/resty/v2) é um dos clientes HTTP mais populares em Go. Oferece interface fluente, desserialização automática de JSON/XML, cadeias de chamadas convenientes.



package main

import ( "fmt" "github.com/go-resty/resty/v2")

type User struct { ID int `json:"id"` Name string `json:"name"`}

func main() { client := resty.New() client.SetBaseURL("https://jsonplaceholder.typicode.com")

var users []User resp, err := client.R(). SetResult(&users). Get("/users")

if err != nil { panic(err) }

fmt.Println("Status:", resp.StatusCode()) fmt.Println("First user:", users[0].Name)}


Vantagens: sintaxe concisa, suporte embutido a retentativas, timeouts, proxy, tratamento automático de erros, trabalho com multipart/form-data.

Desvantagens: um pouco mais lento que net/http em altas cargas (devido às abstrações), não suporta HTTP/3.



3. grequests — versão Go do popular cliente Python



grequests (instalação: go get github.com/levigross/grequests) é inspirado no Python Requests. Oferece uma API simples para GET, POST, PUT, DELETE, suporta sessões, cookies, processamento automático de JSON.



package main

import ( "fmt" "github.com/levigross/grequests")

func main() { resp, err := grequests.Get("https://httpbin.org/get", &grequests.RequestOptions{ Headers: map[string]string{"Accept": "application/json"}, }) if err != nil { panic(err) }

var data map[string]interface{} resp.JSON(&data) fmt.Println("URL:", data["url"])}


Vantagens: código minimalista, trabalho conveniente com JSON, suporte a uploads de arquivos.

Desvantagens: projeto

Recommendations