DEV Community

Cover image for Go: Fiber vs Echo (a developer point)
Andrei Dascalu
Andrei Dascalu

Posted on • Edited on

Go: Fiber vs Echo (a developer point)

Hi there!

I'm not a Go expert by any means but I grew into really enjoying the language, its opinionated ways, concurrency and sheer performance. While I do frown that it doesn't have the tools for better support of functional patterns, I appreciate the simplicity that makes it easy to get the job done with a reasonable amount of code.

That said, I also like things that make me more productive. Enter frameworks! And Go has so many of them. Minimalist, progressives, swiss-army-knives, you name it!

But until recently, I was (and still am, to a certain extent) a fan of the Echo framework. It's fast enough and has all the features that I look for in a framework:

  • no-nonsense router that supports grouping and middlewares
  • ton of middleware (some microservice must-haves like Prometheus, JWT and Jaeger)
  • a decent logger that defaults to JSON
  • easy way to control CORS (for those situations you're not using an external load balancer)

I was always aware that Echo (while fast, at least fast enough for my use cases) wasn't the top of the bunch in Go-world, but the shortcomings and annoyances I have with Gin and others made me overlook that. Also, all those built-in middlewares are awesome - I can't emphasise enough how important it is to have these to get things rolling (particularly Prometheus and JWT).

Yet recently I gave Fiber a shot and boy, was I impressed! Just by switching to it (surprisingly easy, just a couple of methods to replace, handlers, etc) my API response times lowered by roughly 40%. It's not all rosy though as:

  • Fiber's logger doesn't do JSON, not by configuration at least. I can provide a pattern for it, but I ended up using my own middleware based on zerolog (it's also a bit faster than the built in logger)
  • Fiber doesn't have as many middlewares available. It's a bit annoying to maintain a list of add-ons that belong to third parties, which may go away at any time. I miss Prometheus & Jaeger, for one.
  • Fiber's autorecovery goes through the built-in logger which, as mentioned, doesn't do JSON. It's annoying as hell, when you're using external log aggregators, to have a message out of the blue break the serenity of your ingest patterns.
  • it's not as easy to hook into an extend with customizations. I guess performance comes with a price as Fiber also has its quirks, mostly related to its zero allocations mantra.

I guess good things come with a price, but I'm more than happy to keep Fiber close!

Top comments (5)

Collapse
 
shytikov profile image
Oleksii Shytikov

I have updated Gofiber JWT middleware to support JWKs, so it's already one step closer to being better for microservice use: github.com/gofiber/jwt

Collapse
 
nikhildev profile image
Nikhil Dev Chunchu

@shytikov The repo states its deprecated

Collapse
 
andreidascalu profile image
Andrei Dascalu

Awesome!

Collapse
 
delightfulcodes profile image
Christian Ndu

I'm interested in seeing how you did the JSON logging

Collapse
 
lexiebkm profile image
Alexander B.K.

Which one do you recommend : Fiber or Echo ? What about the others like Gin, Iris, etc ?