Looking for the top Go frameworks for the web? You came to the right place.
Go is a multiparadigm, statically-typed, and compiled programming language designed by Google. It is similar to C, and if you’re a fan of C, this can be an easy language to pick up. Many developers have embraced this language because of its garbage collection, memory safety, and structural typing system.
According to the 2020 Stack Overflow developer survey, Go is now considered the fifth most “loved” language on the site and the third most “wanted” language for developers to learn who do not know Go yet.
Go is mostly used for web applications, which is why we will look at the top five Go web frameworks and their features to see which is best for your own development.
In this post, we’ll review the reasons to use Go, the pros and cons of using Go frameworks, and five current top Go frameworks, including:
And now, let’s get into it.
Why use Go?
Before reviewing five top Go frameworks, what is Go truly used for? Aside from building general web applications, the language’s scope encompasses a wide range of use cases:
- Command line application
- Cloud-native development
- Creating utilities and stand-alone libraries
- Developing databases, such as CockroachDB
- Game development
- Development operations
Go web frameworks were created to ease Go web development processes without worrying about setups and focusing more on the functionalities of a project.
Using Go without a framework is possible, however, it is much more tedious and developers must constantly rewrite code. This is where the web frameworks come in.
With frameworks, for instance, instead of writing a wrapper around a database connection in every new project, developers can just pick a favorite framework and focus more on the business logic.
Pros of using Go web frameworks
Before we look into five top Go web frameworks, let’s review a few reasons why Go is popular.
Static typing
Static typing provides better performance at runtime because it’s mostly used to build high-performance applications that are highly optimized at compile times.
Static typing also finds hidden problems like type errors. For example, if I need to create an integer variable, the compiler now notes it is an integer and only accepts an integer. This makes it easier to manage code for larger projects.
Available packages
A lot of developers have created production-ready packages on top of Go standard packages. These packages often become the standard libraries for specific features. For example, Gorilla Mux was created for routing by the community because the initial Go router is quite limited.
All Go-related packages are available on Github, such as MongoDB, Redis, and MySQL.
Fast development
Development time for these frameworks is fast and simple. Packages are already available and can import easily, eliminating the need to write redundant code, which is a win for developers.
Built-in concurrency
Go’s Goroutines, which provide simple concurrency, provide language-level support for concurrency, lightweight threads, strict rules for avoiding mutation to disallow race conditions, and overall simplicity.
Cons of using Go frameworks
The only true con to be aware of when using Go frameworks is error handling. It is still difficult to handle errors in Go because it is cumbersome and noisy by returning errors with responses and its strict type makes it harder to write.
5 top Go frameworks
Gin
Gin is an HTTP web framework written in Go that is immensely popular with over 50k stars on Github at the time of posting.
Currently, it is most popular for building microservices because it allows a simple way to build a request-handling pipeline where you can plug in middlewares.
It also boasts of a Martini-like API and, according to Gin’s GitHub page, is 40x faster because of httprouter. Below are some of its amazing features.
Gin general features
Error management
Gin offers convenient error management. This means when encountering any errors during an HTTP request, Gin documents the errors as they occur:
c.AbortWithStatusJSON(400, gin.H{ "error": "Blah blahhh" }) // continue c.JSON(200, gin.H{ "msg": "ok" })
Creating middleware
It’s also incredibly easy to create middleware, which can be plugged into the request pipeline by creating a router with r := gin.New()
and adding a logger middleware with r.Use(gin.Logger())
.
You can also use a recovery middleware with r.Use(gin.Recovery())
.
Gin’s performance
Gin’s performance is thanks to its route grouping and small memory. Gin’s grouping ability for routes lets routes in Gin nest infinitely without it affecting performance.
Its fast performance is also thanks to its small memory, which Gin uses or references while running. The more memory usage the server consumes, the slower it gets. Since Gin has a low memory footprint, it provides faster performance.
JSON validation
Finally, Gin provides support for JSON validation. Requesting with a JSON can validate required values, like input data from the client. These values must be validated before saving in memory, so by validating them, developers can avoid saving inaccurate values.
Gin is a simple, easy-to-use framework that, if you are just starting to use Golang, Gin has been voted the most ideal framework because it is minimal and straightforward to use.
For a jumpstart tutorial, you can check this link.
Beego
Beego is another Go web framework that is mostly used to build enterprise web applications with rapid development.
Beego has four main parts that make it a viable Go framework:
- Base modules, which contain
log
,config
, andgovernor
- A webserver
- Tasks, which work similarly to cron jobs
- A client, which houses the ORM, httplib, and cache modules
Beego general features
Supports enterprise applications
Because Beego focuses on enterprise applications, which tend to be very large with a lot of code powering a lot of features, a modular structure arranges modules for specific use cases, optimizing performance.
So, the framework provides a great modular structure for things like a configuration module, logging module, and caching module.
It also uses a regular MVC architecture to handle specific development aspects in an app, which is also beneficial for enterprise applications.
Supports namespace routing
Namespace routing is supported by Beego as well, which defines where the Controller
is located for a Route
. Below is an example:
func init() { ns := beego.NewNamespace("/v1", beego.NSRouter("/auth", &controllers.AuthController{}), beego.NSRouter("/scheduler/task",&controllers.TaskController{}), ) beego.AddNamespace(ns) }
Beego’s automated API documentation through Swagger provides developers the automation they need to create API documentation without wasting time manually creating it.
Route annotation lets developers define any component for a route target for a given URL. This means routes do not need to be registered in the route file again; only the controller should use Include
.
With the following route annotation, Beego parses and turns them into routes automatically:
// Weather API type WeatherController struct { web.Controller } func (c *WeatherController) URLMapping() { c.Mapping("StaticBlock", c.StaticBlock) c.Mapping("AllBlock", c.AllBlock) } // @router /staticblock/:key [get] func (this *WeatherController) StaticBlock() { } // @router /all/:key [get] func (this *WeatherController) AllBlock() { }
Then, register the Controller
:
web.Include(&WeatherController{})
Iris
Iris is an Express.js-equivalent web framework that is easier to use for people coming from the Node.js community.
It comes with Sessions
, API versioning, WebSocket, dependency injection, WebAssembly, the typical MVC architecture, and more, making it very flexible with third-party libraries.
With over 20k stars on GitHub, Iris is most loved because of its simplicity and the ability to extend the framework with personal libraries quickly.
Iris general features
As discussed, one of Iris’s main features is that its fully accordant and flexible with external libraries, letting users pick and choose what they want to use with the framework
With a built-in logger for printing and logging server requests, users don’t need to use something external, cutting down the complexity of using Iris.
Like Beego, it provides MVC support for larger applications and its automated API versioning makes adding new integrations convenient by placing them in newer versions of the route.
Iris’s smart and fast compression provides faster performance, and testing is a breeze with the Ngrok integration, which lets developers share a local webserver with other developers for testing.
One great thing about this specific framework is that the author replies to issues on GitHub quickly, making it helpful when running into bugs.
Echo
Echo is another promising framework created by Labstack with 20k stars on GitHub. It is also regarded as a micro framework, which is more of a standard library and a router, and has fully-baked documentation for developers to use and understand.
This framework is great for people who want to learn how to create APIs from scratch, thanks to its extensive documentation.
Echo general features
Echo lets developers define their own middleware and has built-in middleware to use as well. This gives developers the ability to create custom middleware to get specific functionalities while having the built-in middleware speeds production.
Echo also supports HTTP/2 for faster performance and an overall better user experience.
Its API also supports a variety of HTTP responses like JSON, XML, stream, blob, file, attachment, inline, and customized central HTTP error handling.
Finally, it supports a variety of templating engines, providing the flexibility and convenience developers need when choosing an engine.
Fiber
Fiber is another Express.js-like web framework written in Go that boasts low memory usage and rich routing. Built on top of the Fasthttp HTTP engine for Go, which is the fastest HTTP engine for Go, Fiber provides one of the fastest Go frameworks.
Created with the main focus of minimalism and the Unix philosophy to provide simple and modular software technology, the idea for Fiber was to allow new Go developers to begin creating web applications quickly.
Fiber general features
Fiber boasts of a built-in rate limiter that helps reduce traffic to a particular endpoint. For example, this is helpful if a user tries to sign in to an account continuously and knowing that it might be malicious activity.
Its static files, like style sheets, scripts, and images, can be handled and served from the server, making them easily cached, consuming less memory, and the content remains static upon every request.
And its support for WebSocket bidirectional TCP connections is useful for creating real-time communications, like a chat system.
Like the other Go frameworks we’ve mentioned in this post, it has versatile middleware support, supports a variety of template engines, has low memory usage and footprint, and provides great documentation that is easy and clear for new users.
Conclusion
In this article, we looked at five top Go web frameworks. This list does not mean these are the best or indicates which you should choose. Your favorite might not be on the list but that does not stop it from being a better framework for you depending on your use case.
While some of these frameworks are inspired by others, some are built to cover areas others didn’t, and most of them have similar features, the best framework depends on your use case, so pick the framework that’s best for your Go project.
Get setup with LogRocket's modern error tracking in minutes:
- Visit https://logrocket.com/signup/ to get an app ID.
- Install LogRocket via NPM or script tag.
LogRocket.init()
must be called client-side, not server-side. - (Optional) Install plugins for deeper integrations with your stack:
- Redux middleware
- ngrx middleware
- Vuex plugin
$ npm i --save logrocket
// Code:
import LogRocket from 'logrocket';
LogRocket.init('app/id');
Add to your HTML:
<script src="https://cdn.lr-ingest.com/LogRocket.min.js"></script>
<script>window.LogRocket && window.LogRocket.init('app/id');</script>
So, I’ve just reading some bunch of articles about Go web frameworks, just to make sure I’m keeping up with today’s Go news. I, personally, like to glue things myself with bunch of libraries and won’t use any web frameworks in near future, this is just for reference in case somebody I know want to jump in to wagon and Go! (pun intended).
This article is good for starting point, but there’s something wrong on this article in my opinion. Please correct me if I’m wrong here, feel free to do so. I’m just pointing some sections that I think it’s not right, either it’s useful or not, so other beginner knows the stuffs and don’t fall further.
First, you mention that Gin has low memory footprint, and it means that Gin has fast performance. This is incorrect ways of thinking. Sure, Gin is fast, but low memory doesn’t equal fast performance. If you’re using bunch of caching correctly, it might have high memory footprint, but it does faster (mind the correctness usage of caching). So my point here is, low memory doesn’t mean fast performance.
On Gin’s JSON validation section, instead of using “These values must be validated before saving in memory”, you can use “These values must be validated before used on business logic”. The unvalidated raw JSON request is already in memory.
You mention on Beego section that modular structure optimizes performance, that is incorrect. Project structure doesn’t determine performance, and sometimes if you build modular structure incorrectly, you’ll get slower performance. But if performance that you mean is development performance, then I believe modular structure helps on that too.
I never wanted to label myself as ‘expert’ on anything, in fact I’m not, so take this comment with grain of salt. I think I’m missing other points but my limited knowledge hinders me from those points. Feel free to correct me if I’m wrong, as I’m here to learn too.
Oh, and lastly, please AVOID Iris as much as possible, treat it and the owner like a plague. Stealing other codes without credit, deleting issues and comments, self claiming that it’s the best of the best, and many more. Not a healthy open source project, thus it’s better to stay away from that. There are bunch of other good frameworks beside Iris, this article mention 4 of them, so there’s no point on investing on Iris. You won’t see Iris mentioned on other popular projects too, because they’re already know. If you don’t believe me, try search Iris history on search engines with “iris golang drama” as the keyword, and you will know how worse that project is.
Thanks for reading, and have a good day!
Hi there, I have a few disagreements to your points.
First, you disagreed on low memory footprint yielding to a fast performance which is true, definitely. As you know, an OS relies a lot on the RAM for a smooth running of tasks. So, for Gin to have low memory usage says a lot to how fast it can be. According to the article, “low memory footprint” not low memory.
Secondly, validated data isn’t saved in memory unless being made so by the business logic. The “memory” here is the database. Data coming in is validated and then saved into the memory which is already obvious. You are clearly saying the same thing. Besides, invalidated isn’t already in any memory, what happens when the server is restarted before it reaches the database?
Also, on Beego’s performance, yes, it’s development performance.
Lastly, Iris has been acquired by a Dubai startup if you know that? Also, development is done by the community which has lot of support. Your claim is backed to 2017/2018 and we can not continue to tarnish the image of Iris. It’s currently being used by a thousand developers. If you have proof to these claims I wouldn’t mind listening.
Thank you.