Discover awesome-go, the definitive curated list of Go libraries, frameworks, and tools for every Go developer.

Awesome Go: The Go resource list you need to bookmark


Every Go developer eventually asks the same question: “Is there a library for this?” The answer is almost always yes. Finding it is the hard part.

Awesome Go solves this problem. It’s a community-maintained list of Go frameworks, libraries, and software. Think of it as a curated directory of everything useful in the Go ecosystem.

What Makes Awesome Go Different

The Go community produces thousands of packages. Most package search tools just index everything. Awesome Go takes a different approach.

Every submission goes through a review process. Maintainers check for code quality, documentation, and active maintenance. If a project doesn’t meet the bar, it doesn’t get listed.

This curation matters. When you pick a library from Awesome Go, you know someone has already vetted it.

How the List is Organised

The list groups packages by category. Here are some highlights:

  • Web Frameworks: Gin, Echo, Fiber, Chi
  • Database Drivers: Everything from PostgreSQL to MongoDB
  • Testing: Testify, GoMock, Ginkgo
  • Logging: Zap, Zerolog, Logrus
  • Configuration: Viper, Envconfig, Koanf

Each entry includes a brief description and a link to the repository. No fluff. Just what you need to evaluate options.

Finding Packages the Smart Way

Let’s say you need an HTTP client with retry logic. You could search GitHub directly. Or you could check Awesome Go’s “HTTP Clients” section.

Here’s a typical discovery workflow:

// You find resty in the Awesome Go list
// https://github.com/go-resty/resty

package main

import (
    "fmt"
    "github.com/go-resty/resty/v2"
)

func main() {
    client := resty.New()
    client.SetRetryCount(3)
    
    resp, err := client.R().
        SetHeader("Accept", "application/json").
        Get("https://api.example.com/users")
    
    if err != nil {
        fmt.Println("request failed:", err)
        return
    }
    
    fmt.Println("Status:", resp.Status())
}

The list led you to resty. You saved hours of research.

Contributing to Awesome Go

Awesome Go participates in Hacktoberfest each year. It’s a great way to contribute to open source.

Adding a package requires a pull request. The package must meet quality standards:

// Good packages have clear, documented APIs
// Here's an example of what maintainers look for

package mylib

// Client handles API communication.
// It supports retry logic and rate limiting.
type Client struct {
    baseURL string
    timeout time.Duration
}

// NewClient creates a Client with sensible defaults.
func NewClient(baseURL string) *Client {
    return &Client{
        baseURL: baseURL,
        timeout: 30 * time.Second,
    }
}

// Get fetches a resource. It returns an error if the request fails.
func (c *Client) Get(path string) ([]byte, error) {
    // Implementation with proper error handling
}

Clear documentation. Exported types with comments. Proper error handling. These are the basics.

Building Your Own Toolkit

I recommend browsing Awesome Go when starting a new project. Make a shortlist of libraries for your needs.

For web services, my typical stack looks like this:

package main

import (
    "github.com/gin-gonic/gin"          // Web framework
    "github.com/rs/zerolog"             // Logging
    "github.com/spf13/viper"            // Configuration
    "github.com/jackc/pgx/v5"           // PostgreSQL driver
)

func main() {
    // All discovered through Awesome Go
    r := gin.Default()
    
    r.GET("/health", func(c *gin.Context) {
        c.JSON(200, gin.H{"status": "ok"})
    })
    
    r.Run(":8080")
}

Each of these libraries appears on the list. Each has been vetted by the community.

When to Look Beyond the List

Awesome Go covers most common needs. But it’s not exhaustive.

For niche domains, you might need to search elsewhere. The list favours established libraries. Brand new packages might not appear for months.

If you’re exploring advanced patterns like functional options, you’ll find foundational libraries on the list. But the patterns themselves come from experience.

Wrapping Up

Bookmark Awesome Go. Check it before adding dependencies. Contribute when you find something great.

The Go community maintains this resource together. Use it well.