frameworks-web-go-gin-fiber-chi

Frameworks web en Go: cuándo usar Gin, Fiber o chi

  • 3 min

Un framework web en Go es una capa que facilita rutas, middlewares y utilidades habituales para construir APIs con menos código repetido. Muchos se apoyan en net/http, aunque no todos.

Go ya trae un servidor HTTP muy capaz en la librería estándar. Eso es importante. Antes de instalar nada, conviene tener claro que net/http no es un juguete.

Desde Go 1.22, net/http ya incluye patrones por método y parámetros de ruta. Aun así, cuando una API crece aparecen necesidades como grupos, validación, binding, middlewares empaquetados o respuestas más cómodas. Ahí un framework puede ahorrar trabajo.

¿Necesito un framework?

Depende del tamaño del proyecto. Para una herramienta interna pequeña, un webhook o una API sencilla, net/http suele ser suficiente.

Para una API con muchas rutas, autenticación, validación y convenciones compartidas, un framework puede hacer que el código quede más uniforme y menos repetitivo.

En Go se valora mucho mantener las dependencias bajo control. No se trata de evitar frameworks por orgullo, sino de usarlos cuando realmente aportan.

Gin

Gin es un framework extendido con una API centrada en productividad, binding, renderizado y middlewares. Su versión actual requiere Go 1.25 o posterior.

go get github.com/gin-gonic/gin@latest
Copied!

Ejemplo mínimo:

package main

import (
    "log"

    "github.com/gin-gonic/gin"
)

func main() {
    r := gin.Default()

    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "mensaje": "pong",
        })
    })

    log.Fatal(r.Run(":8080"))
}
Copied!

Gin destaca por su ergonomía. El contexto gin.Context agrupa request, response, parámetros, JSON y utilidades.

r.GET("/usuarios/:id", func(c *gin.Context) {
    id := c.Param("id")
    c.JSON(200, gin.H{"id": id})
})
Copied!

Fiber

Fiber está inspirado en Express de Node.js y usa fasthttp por debajo, no net/http. Fiber v3 es la rama actual y requiere Go 1.25 o posterior.

go get github.com/gofiber/fiber/v3@latest
Copied!

Ejemplo:

package main

import (
    "log"

    "github.com/gofiber/fiber/v3"
)

func main() {
    app := fiber.New()

    app.Get("/ping", func(c fiber.Ctx) error {
        return c.JSON(fiber.Map{
            "mensaje": "pong",
        })
    })

    log.Fatal(app.Listen(":8080"))
}
Copied!

Fiber resulta muy cómodo si venís de JavaScript, porque la forma de trabajar recuerda bastante a Express.

Como Fiber no usa net/http directamente, algunas librerías o middlewares del ecosistema estándar no encajan sin adaptadores. No es malo, simplemente conviene saberlo antes de elegir.

chi

chi es un router ligero y muy idiomático. Se apoya en net/http, así que encaja muy bien con la librería estándar.

go get github.com/go-chi/chi/v5@latest
Copied!

Ejemplo:

package main

import (
    "log"
    "net/http"

    "github.com/go-chi/chi/v5"
)

func main() {
    r := chi.NewRouter()

    r.Get("/ping", func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("pong"))
    })

    log.Fatal(http.ListenAndServe(":8080", r))
}
Copied!

chi suele gustar mucho cuando queréis algo pequeño, compatible con net/http y sin demasiada capa extra.

Comparativa rápida

OpciónEnfoqueCuándo encaja
net/httpBiblioteca estándar con métodos y comodinesServicios que no necesitan una capa adicional
GinFramework con contexto, binding y renderizadoAPIs que valoran convenciones y utilidades integradas
Fiber v3API estilo Express sobre fasthttpEquipos que aceptan salir del ecosistema directo de net/http
chi v5Router ligero sobre net/httpProyectos que necesitan grupos y composición manteniendo compatibilidad estándar

Qué elegir

Si estáis aprendiendo Go, mi recomendación es clara: empezad con net/http. Así entendéis la base real del ecosistema.

Después, cuando el proyecto pida grupos, binding o middlewares empaquetados, probad chi o Gin. Fiber v3 puede encajar si su estilo os resulta natural y la compatibilidad directa con net/http no es un requisito.

No elijáis un framework solo porque salga en una comparativa de rendimiento. En APIs reales, muchas veces el cuello de botella está en la base de datos, la red o servicios externos, no en el router.