O Fiber é um framework web para Go descrito pelo próprio projeto como “inspirado no Express” e construído sobre o fasthttp. A ideia é dar a quem vem do Node uma API familiar. Este tutorial usa a versão atual, a v3, e avisa onde ela difere de tutoriais mais antigos.
fasthttp e o custo da velocidade
A maioria dos frameworks Go, como o Gin, roda sobre o net/http da biblioteca padrão. O Fiber usa o fasthttp. O README do fasthttp afirma que o servidor é até 6 vezes mais rápido que o net/http e o cliente até 4 vezes, com números de microbenchmark (cerca de 1.422 ns/op contra 7.151 ns/op no servidor). Uma versão anterior deste post falava em “até 10x”, que não aparece nessa página.
O mesmo README é franco sobre o limite: para a maioria dos casos o net/http é melhor, por ser mais fácil e tratar mais situações. O fasthttp usa outro modelo de handler, não tem um ServeMux embutido e não deixa guardar referências ao contexto da requisição depois que o handler retorna. A documentação do Fiber diz que ele convive com a biblioteca padrão e oferece um adaptador para handlers de net/http.
Requisitos e instalação
O README do Fiber v3 pede Go 1.26 ou superior. A importação usa o caminho /v3:
mkdir aprendendo-fiber && cd aprendendo-fiber
go mod init meunome/fiber
go get github.com/gofiber/fiber/v3
Primeira API
package main
import (
"log"
"github.com/gofiber/fiber/v3"
)
func main() {
app := fiber.New()
app.Get("/", func(c fiber.Ctx) error {
return c.SendString("Olá, mundo!")
})
app.Get("/ola/:nome", func(c fiber.Ctx) error {
return c.SendString("Olá, " + c.Params("nome"))
})
log.Fatal(app.Listen(":3000"))
}
Rode com go run main.go e abra localhost:3000/ola/dev. Repare que o handler recebe fiber.Ctx como valor. Na v2 era *fiber.Ctx, o que quebra tutoriais antigos.
JSON
type Produto struct {
Nome string `json:"nome"`
Preco float64 `json:"preco"`
}
app.Post("/produtos", func(c fiber.Ctx) error {
p := new(Produto)
if err := c.Bind().JSON(p); err != nil {
return c.Status(400).SendString(err.Error())
}
return c.Status(201).JSON(p)
})
Segundo a documentação, o método BodyParser da v2 foi substituído pela API Bind(). Há também c.Bind().Body(p), que detecta o tipo de conteúdo sozinho.
Gin ou Fiber?
O Gin roda sobre net/http e é compatível com todo o ecossistema de middleware padrão. O Fiber tem uma sintaxe mais próxima da do Express e usa fasthttp. Em benchmark sintético o Fiber costuma ganhar, mas banco de dados e rede costumam pesar mais que o framework no tempo total de uma requisição. Se o seu time vem do Node, o Fiber reduz a curva. Se quer o caminho mais conservador e compatível, o Gin é a escolha mais segura.
Exercício: adicione uma validação ao endpoint de produto e devolva 400 se o preço for menor que zero.