Discover awesome-go, the community-curated list of Go libraries, frameworks, and tools you'll reference daily.

The Ultimate Bookmark Every Go Developer Needs


You’re building a new Go project. You need a router. Or maybe a database driver. Or a testing framework. Where do you start?

If you’re Googling “best Go HTTP router” or “golang logging library comparison,” you’re doing it wrong. There’s a better way: awesome-go.

What Is awesome-go?

It’s a curated list of Go frameworks, libraries, and software. That’s it. No fluff. Just links organized by category.

The project follows the broader awesome-list format you’ll find across GitHub. But awesome-go is specifically for the golang ecosystem. And it’s massive.

Need authentication? There’s a section. Need message queues? There’s a section. Need configuration management? You guessed it.

Why This Matters

The Go standard library is excellent. But it doesn’t do everything. At some point, you’ll need third-party packages.

The problem? There are thousands of options. Some are abandoned. Some are poorly maintained. Some solve problems that don’t exist.

Awesome-go solves this through community curation. Packages must meet quality standards to be listed. They need:

  • Active maintenance
  • Proper documentation
  • Actual users

This filters out the noise.

How I Actually Use It

Let me show you a real workflow. Say I’m building an API and need input validation.

First, I check the validation section on awesome-go. I find several options. Then I pick one and start coding:

package main

import (
	"fmt"

	"github.com/go-playground/validator/v10"
)

type User struct {
	Email    string `validate:"required,email"`
	Age      int    `validate:"gte=0,lte=130"`
	Password string `validate:"required,min=8"`
}

func main() {
	validate := validator.New()

	user := User{
		Email:    "test@example.com",
		Age:      25,
		Password: "short",
	}

	err := validate.Struct(user)
	if err != nil {
		for _, e := range err.(validator.ValidationErrors) {
			fmt.Printf("Field '%s' failed on '%s' tag\n", e.Field(), e.Tag())
		}
	}
}

I found go-playground/validator through awesome-go. Saved me hours of research.

Categories You Should Know

Some sections I keep coming back to:

Testing - Go’s built-in testing is good. But sometimes you need more. The testing section lists mocking libraries, assertion helpers, and fuzzing tools. If you’re interested in improving your test suite, check out our guide to mocking in Go.

Networking - HTTP clients, WebSocket libraries, gRPC utilities. Speaking of which, there’s an entire section dedicated to gRPC tools.

Database Drivers - Every database you can think of. PostgreSQL, MySQL, Redis, MongoDB, and dozens more.

Here’s how you might use a database package from the list:

package main

import (
	"context"
	"log"

	"github.com/jackc/pgx/v5"
)

func main() {
	conn, err := pgx.Connect(context.Background(), "postgres://user:pass@localhost/db")
	if err != nil {
		log.Fatal(err)
	}
	defer conn.Close(context.Background())

	var greeting string
	err = conn.QueryRow(context.Background(), "SELECT 'Hello, World!'").Scan(&greeting)
	if err != nil {
		log.Fatal(err)
	}

	log.Println(greeting)
}

The pgx library is listed under database drivers. It’s fast, well-maintained, and actively developed.

Contributing Back

Awesome-go participates in Hacktoberfest. Found a great golang-library that’s not listed? Submit a PR.

The contribution guidelines are strict. That’s a feature, not a bug. It keeps quality high.

// Before submitting, ask yourself:
// - Is this package actively maintained?
// - Does it have proper documentation?
// - Would other Go developers find it useful?
// - Does it solve a real problem?

The Takeaway

Bookmark awesome-go. Reference it when starting new projects. Use it to discover tools you didn’t know existed.

It’s the collective wisdom of the Go community, organized and curated. That’s worth more than any Google search.