Awesome Go is the ultimate curated list of Go libraries and tools. Here's how to use it effectively.

The only Go bookmark you actually need


Every Go developer has been there. You need a library for something—maybe logging, maybe HTTP routing, maybe database migrations. You Google it. You get five Medium articles from 2019, three Stack Overflow answers, and a Reddit thread where everyone disagrees.

There’s a better way: Awesome Go.

What is Awesome Go?

Awesome Go is a curated list of Go frameworks, libraries, and software. It’s part of the broader “awesome-list” movement on GitHub, but it’s arguably one of the most useful and well-maintained lists out there.

The project organises hundreds of golang libraries into categories. Need a JSON parser? There’s a section. Need a message queue? There’s a section. Need a command-line interface builder? You guessed it.

But here’s what makes it special: every library goes through a review process. It’s not just a dumping ground for every Go package on the internet. The maintainers actually check that submissions meet quality standards.

How the list is organised

The categories cover pretty much everything you’d need:

  • Web Frameworks: Gin, Echo, Fiber, and more
  • Database Drivers: PostgreSQL, MySQL, MongoDB connectors
  • Testing: Mocking frameworks, assertion libraries, test runners
  • Logging: Structured loggers, log rotation tools
  • Configuration: Environment variable parsers, config file readers

Let me show you how to quickly find and use libraries from the list.

Finding the right library

Say you need a configuration library. Here’s a typical workflow:

// After finding "viper" in Awesome Go's Configuration section
package main

import (
    "fmt"
    "github.com/spf13/viper"
)

func main() {
    viper.SetConfigName("config")
    viper.SetConfigType("yaml")
    viper.AddConfigPath(".")
    
    if err := viper.ReadInConfig(); err != nil {
        panic(fmt.Errorf("fatal error config file: %w", err))
    }
    
    port := viper.GetInt("server.port")
    fmt.Printf("Server port: %d\n", port)
}

The list links directly to each project’s GitHub repo, so you can check documentation, recent activity, and issues before committing.

Contributing to Awesome Go

The project participates in Hacktoberfest, making it a great entry point for open source contributions. You can add new libraries, fix broken links, or improve descriptions.

Here’s what a typical contribution looks like:

## Your Category

*Brief description of what this category covers.*

- [library-name](https://github.com/author/library-name) - Brief description of what it does.

The submission guidelines are strict but fair. Your golang-library needs:

  • A README with clear documentation
  • Tests
  • Recent commits (abandoned projects get removed)

Making your own awesome list

The format is simple enough that you can create your own for internal use. Maybe a list of approved libraries for your team:

// internal/approved/packages.go
package approved

// ApprovedPackages documents our vetted dependencies
var ApprovedPackages = map[string]string{
    "http-router": "github.com/go-chi/chi",
    "logging":     "go.uber.org/zap",
    "testing":     "github.com/stretchr/testify",
    "config":      "github.com/spf13/viper",
}

This helps standardise your codebase. When someone asks “what should I use for X?”, point them to the list.

Tips for using Awesome Go effectively

Don’t just grab the first library you see. Check a few things:

  1. Recent activity: When was the last commit?
  2. Open issues: Are there many unanswered bugs?
  3. Documentation: Can you figure out how to use it?

If you’re new to Go and want to understand the language fundamentals before diving into libraries, check out our guide on using regex in Go or explore Go slice internals.

For more advanced patterns like memoisation that many of these libraries use internally, see our memoisation post.

Bookmark it

Seriously, just bookmark Awesome Go. Next time you need a library, start there instead of Google. You’ll save time and probably find better options than whatever the SEO-optimised Medium article is pushing.