DEV Community

Cover image for El mejor framework de go para desarrolladores nodejs-express
Michel Novellino
Michel Novellino

Posted on

El mejor framework de go para desarrolladores nodejs-express

Tabla de contenidos


Actualmente no soy un experto ni mucho menos en este lenguaje pero he llegado a agarrarle cariño y quiero compartir con ustedes no un tutorial de go como muchos existentes, quiero compartir un framework que se ha convertido rápidamente en mi favorito (bueno digo esto pero realmente el otro con el que he trabajado es Beego así que no es que los conozca todos pero así funciona el amarillismo). Planeo hacer este articulo introductorio y próximamente un ejemplo funcional.

Así que, ¿Por qué fiber y por qué es el mejor framework de go para desarrolladores familiarizados con el entorno nodejs-express?

Muy sencillo joven padawan, en sus propias palabras:

Fiber es un framework web inspirado en Express desarollado sobre Fasthttp, el motor HTTP más rápido para Go. Diseñado para facilitar las cosas logrando un desarrollo rápido con cero asignación de memoria y rendimiento en mente.

Como pueden apreciar el equipo creador de este framework esta dedicado a que la experiencia sea lo mas similar posible a la que tenemos quienes trabajamos con express.

Requisitos

Como se pueden imaginar el requisito primordial es tener instalado go
Como este articulo es dedicado a fiber no explicare como instalar el lenguaje, es primordial tener conocimientos básicos de go.

Creamos una carpeta para nuestro proyecto en el directorio de trabajo y accedemos a ella.

mkdir example && cd example

Luego creamos el archivo main.go

touch main.go

En este punto necesitaremos obtener el paquete de fiber para poder seguir con el ejemplo así que lo instalaremos con:

go get -u github.com/gofiber/fiber

Abrimos el archivo con nuestro editor de texto.

nano main.go

Manos a la obra

Ahora colocamos este código de ejemplo que nos ofrece la Documentación oficial

package main
import "github.com/gofiber/fiber"
func main() {
app := fiber.New()
app.Get("/", func(c *fiber.Ctx) {
c.Send("Hola, Mundo!")
})
app.Listen(3000)
}
Enter fullscreen mode Exit fullscreen mode

Lo ejecutamos

go run main.go

Alt Text

Wuolah! tenemos un servidor escuchando en el puerto 3000 y nuestra primera ruta.

Como podrán imaginarse si colocamos este ejemplo funcionara sin problemas

app.Get("/:valor", func(c *fiber.Ctx) {
c.Send("Pedido Get con el valor: " + c.Params("valor"))
// => Pedido Get con el valor: hola mundo
})
Enter fullscreen mode Exit fullscreen mode

También soporta parámetros opcionales en las rutas colocando ? al final del parámetro como hacemos en express.

app.Get("ruta/:nombre?/:apellido?", func(c *fiber.Ctx) {
nombre := "Sin nombre"
apellido := "Sin apellido"
if c.Params("nombre") != "" {
nombre = c.Params("nombre")
// => Hola: michel Sin apellido
}
if c.Params("apellido") != "" {
apellido = c.Params("apellido")
// => Hola:  Sin nombre novellino
}
if c.Params("nombre") == "" && c.Params("apellido") == "" {
c.Send("¿Por qué no envía el nombre y apellido?")
}
c.Send("Hola: " + nombre + " " + apellido)
})
Enter fullscreen mode Exit fullscreen mode

Podemos agrupar nuestras rutas con prefijos

g := app.Group("/users")
g.Get("/", GetAllHandler())
g.Get("/:id", GetHandler())
g.Post("/", PostHandler())
g.Put("/:id", PutHandler())
g.Delete("/:id", DeleteHandler())
Enter fullscreen mode Exit fullscreen mode

¿Archivos estaticos? por supuesto, tan sencillo de declarar como esto.

app.Static("/static", "./public") 
Enter fullscreen mode Exit fullscreen mode

¿Manejar 404 para rutas no existentes?

app.Use(func(c *fiber.Ctx) {
c.SendStatus(404) // => 404 "Not Found"
c.Send("Not Found")
})
Enter fullscreen mode Exit fullscreen mode

¿ Quieres servir una spa?

func main() {
app := fiber.New()
app.Static("/web", "dist")
app.Get("/web/*", func(ctx *fiber.Ctx) {
ctx.SendFile("dist/index.html")
})
// Start server on http://localhost:3000
log.Fatal(app.Listen(3000))
}
Enter fullscreen mode Exit fullscreen mode

¿Puedo manejar multiples middlewares? claro que si.

app := fiber.New()
app.Get("/", one, two, three)
app.Listen(3000)
}
func one(c *fiber.Ctx) {
fmt.Println("ruta 1")
c.Next()
}
func two(c *fiber.Ctx) {
fmt.Println("ruta 2")
c.Next()
}
func three(c *fiber.Ctx) {
fmt.Println("ruta 3")
c.Send("Hello, World!")
}
Enter fullscreen mode Exit fullscreen mode

¿Fiber tiene buen performance?

Como ya se ha explicado fiber es un framework cuya intención principal es generar una curva de aprendizaje corta para desarolladores de express, esto no quiere decir que el tema del performance sea algo netamente secundario, todo lo contrario, el rendimiento frente a nodejs es abismal, como prueba les dejo el link directo al benchmark.


En conclusión podemos decir que es quizá la mejor opción en el mercado para el guerrero experimentado del mundo javascript con express, para aquel que quiera trabajar con go y no sufrir la nostalgia de extrañar la forma de trabajar del framework de javascript, Como un comentario final para el lector Si recibo buen feedback de este articulo traeré una segunda parte con un ejemplo funcional de un crud con mysql utilizando gorm y las funcionalidades de Fiber, Déjenme saber que les parece el articulo y hasta la próxima.

Top comments (0)