Cliente HTTP para Go (Golang): mejores bibliotecas para trabajar con HTTP

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Cliente HTTP para Go (Golang): resumen y comparación de las mejores bibliotecas



Go (Golang) es uno de los lenguajes más populares para crear servicios web de alta carga, microservicios e integraciones de API. Trabajar con solicitudes HTTP es una tarea básica de casi cualquier backend. En la biblioteca estándar de Go ya existe un potente paquete net/http, pero para escenarios complejos (reintentos automáticos, pools de conexiones, interfaz fluent cómoda) se han desarrollado bibliotecas especializadas. En este artículo analizaremos los mejores clientes HTTP para Go: sus características, rendimiento y ejemplos de uso.



1. Estándar net/http — la base de todo



El paquete net/http está integrado en Go y no requiere instalación. Cubre completamente las necesidades básicas: envío de solicitudes GET/POST, trabajo con cabeceras, cookies, tiempos de espera. Sin embargo, para un uso avanzado (por ejemplo, pool de conexiones con configuraciones) se requiere configuración manual de 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))}


Ventajas: cero dependencias, control total, soporte HTTP/2, middleware integrado a través de envoltorios RoundTripper.

Desventajas: código verboso para solicitudes simples, no tiene interfaz fluent, difícil configurar reintentos y deserialización JSON.



2. resty — cliente REST simple y elegante



La biblioteca resty (instalación: go get github.com/go-resty/resty/v2) es uno de los clientes HTTP más populares en Go. Proporciona una interfaz fluent, deserialización automática JSON/XML, cadenas de llamadas 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)}


Ventajas: sintaxis concisa, soporte integrado de reintentos, tiempos de espera, proxy, manejo automático de errores, trabajo con multipart/form-data.

Desventajas: un poco más lento que net/http bajo cargas altas (debido a las abstracciones), no soporta HTTP/3.



3. grequests — versión Go del popular cliente Python



grequests (instalación: go get github.com/levigross/grequests) está inspirado en Python Requests. Proporciona una API simple para GET, POST, PUT, DELETE, soporta sesiones, cookies, procesamiento 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"])}


Ventajas: código minimalista, trabajo conveniente con JSON, soporte de carga de archivos.

Desventajas: proyecto

Recommendations