Get your library card ready

Top 5 libraries for Go

Jane Elizabeth
Shutterstock / Jacob Lund

A language is only as useful as its documentation. Today, we’re taking a look at five of the top Go libraries out there, to see what kind of foundation this strong yet easy to use language has to offer developers.

Go is a sturdy language for general purpose programming. It’s a regular programming workhorse: simple, reliable, and easy to build. But, even the clearest of languages need a few extra references. We’re checking out 5 popular Go libraries and exploring how they can help developers.

Since its debut nearly a decade ago, Go has developed into a stable, easily adopted language. However, a language is only as strong as its user base and developers are only as good as their documentation. Part of creating a living language is creating all the peripheral foundation work that helps keep it growing. Today, we take a look at five different Go libraries to see how developers are making Go work for them.

SEE MORE: Go receives brand and logo makeover

Go kit

This is GitHub’s most popular standard library for Go-related microservices. Go is a general-purpose language, but Go kit is meant to bring specialized support for microservices. It fills in the gaps for functions like RPC safety, system observability, infrastructure integration, and program design.

Go kit makes it easier for teams to adopt microservices, bringing guidance to building distributed systems with solutions to common problems. Since Go kit is lightly opinionated, developers can adapt it to their own situations easily, with interoperability out of the box.


Billed as the “fantastic ORM library for Golang”, GORM is a developer-friendly tool for converting data between incompatible type systems. GORM is a nearly full-featured ORM, with associations, hooks, and a whole laundry list of features.

All ORMS are designed to minimize the amount of code that needs to be re-written when switching between type systems. GORM delivers on this goal with its RAW SQL and SQL Builders, auto migration tools, and extensible plugins for complete customization. Every feature comes with its own tests, making it easier for developers to try something out without completely borking the whole system.

SEE MORE: Go has earned companies’ trust: More developers use it at work now, survey shows


cli, or the library formerly known as, is a simple and fast package for building command line apps for the Go language. With cli, developers are able to quickly build their own expressive command line apps.

Since command line apps are usually so small, why shouldn’t developers be expressive? The team behind cli thinks that code for an API should absolutely be fun and playful. In particular, cli makes it easy to create flags, bash completion routines, and even generated help text.


Okay, I need you all to admire the restraint I am having for this particular library. vegeta, a HTTP load testing tool and library, was clearly created by a DBZ fan. I see you, tsenart. I appreciate it. But look, one reason we shouldn’t use memes in our documentation is that they age quickly.

That being said, vegeta is a versatile tool for HTTP load testing. In particular, it’s designed to test HTTP services with a constant request rate. Presumably, they decided to name it after a Saiyan prince for its attack functions (both targeted and distributed) as a load tester. Vegeta is great if you want your program to get a good workout and analyze any weak points.

SEE MORE: Battle of the rankings: Employers want Go but developers won’t Go


This dependency-free Go library is meant to help match fuzzy strings. In particular, fuzzy is optimized for filenames and code symbols. No worries for what style – fuzzy can parse Sublime Text, VSCode, IntelliJ IDEA and more.

fuzzy provides speedy, intuitive matching. Within milliseconds, fuzzy can match strings and even determine quality matches based on its own internal logic. It does this by looking at the first character in the match string, as well as seeing if the matched character is camel cased, follows a separator like an underscore, or even if it’s adjacent to a previous match. Importantly, fuzzy is even Unicode aware.

Jane Elizabeth
Jane Elizabeth is an assistant editor for

Inline Feedbacks
View all comments