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.