bobmatnyc/claude-mpm-skillsMIT3 files

Golang HTTP Frameworks

Go HTTP API development with net/http, Chi, Gin, Echo, and Fiber frameworks

Specification
Skill ID
bobmatnyc/claude-mpm-skills/golang-http-frameworks
Publisher
bobmatnyc
Repository
claude-mpm-skills
Installs
0
Files
3
License
MIT
Synced
Sep 23, 2026
How to use it

Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.

bobmatnyc/claude-mpm-skills/golang-http-frameworksInstalls these files
  • SKILL.md
  • metadata.json
  • references/go-idioms-quality.md

What this skill tells the agent

Go HTTP Frameworks & REST APIs

Overview

Go provides exceptional HTTP capabilities starting with the standard library's net/http package. Go 1.22+ introduced enhanced pattern routing in ServeMux, making stdlib viable for many applications. For more complex needs, frameworks like Chi, Gin, Echo, and Fiber offer additional features while maintaining Go's simplicity and performance.

Key Features:

  • 🌐 net/http: Production-ready standard library with Go 1.22+ routing
  • 🎯 Chi: Lightweight, stdlib-compatible router with middleware chains
  • ⚡ Gin: High-performance framework with binding and validation
  • 🛡️ Echo: Type-safe, enterprise framework with OpenAPI support
  • 🚀 Fiber: Express.js-inspired framework with WebSocket support
  • 🔧 Middleware: Composable request/response processing
  • ✅ Validation: Struct tag-based request validation
  • 🧪 Testing: httptest.Server for comprehensive integration tests

When to Use This Skill

Activate this skill when:

  • Building RESTful APIs or web services
  • Choosing appropriate HTTP framework for project requirements
  • Implementing authentication or authorization middleware
  • Designing REST endpoint patterns and validation
  • Testing HTTP handlers and middleware chains
  • Optimizing API performance and response times
  • Migrating between HTTP frameworks

Framework Selection Guide

net/http (Standard Library) - Go 1.22+

Use When:

  • Building simple to moderate complexity APIs
  • Avoiding external dependencies is priority
  • Need maximum compatibility and long-term stability
  • Team prefers explicit over implicit patterns

Strengths:

  • Zero dependencies, part of Go standard library
  • Go 1.22+ pattern routing with path parameters
  • Excellent performance and stability
  • Extensive ecosystem compatibility
  • No framework lock-in

Limitations:

  • More verbose middleware composition
  • Manual request validation
  • No built-in binding or rendering

Example:

package main

import (
    "encoding/json"
    "net/http"
    "log"
)

// Go 1.22+ pattern routing
func main() {
    mux := http.NewServeMux()

    // Path parameters with {param} syntax
    mux.HandleFunc("GET /users/{id}", getUserHandler)
    mux.HandleFunc("POST /users", createUserHandler)
    mux.HandleFunc("GET /users", listUsersHandler)

    // Middleware wrapping
    handler := loggingMiddleware(mux)

    log.Fatal(http.ListenAndServe(":8080", handler))
}

func getUserHandler(w http.ResponseWriter, r *http.Request) {
    id := r.PathValue("id") // Go 1.22+ path parameter extraction

    user := User{ID: id, Name: "John Doe"}

    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(user)
}

func loggingMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        log.Printf("%s %s", r.Method, r.URL.Path)
        next.ServeHTTP(w, r)
    })
}

type User struct {
    ID   string `json:"id"`
    Name string `json:"name"`
}

Chi - Lightweight Router

Use When:

  • Want stdlib-compatible router with better ergonomics
  • Need clean middleware composition
  • Prefer explicit over magic patterns
  • Building moderate to complex routing structures

Strengths:

  • 100% compatible with net/http
  • Excellent middleware ecosystem
  • Route grouping and nesting
  • Context-based parameter passing
  • Minimal performance overhead

Installation:

go get -u github.com/go-chi/chi/v5

Example:

package main

import (
    "encoding/json"
    "net/http"
    "github.com/go-chi/chi/v5"
    "github.com/go-chi/chi/v5/middleware"
)

func main() {
    r := chi.NewRouter()

    // Built-in middleware
    r.Use(middleware.Logger)
    r.Use(middleware.Recoverer)
    r.Use(middleware.RequestID)

    // Route grouping
    r.Route("/api/v1", func(r chi.Router) {
        r.Route("/users", func(r chi.Router) {
            r.Get("/", listUsers)
            r.Post("/", createUser)

            r.Route("/{userID}", func(r chi.Router) {
                r.Use(UserContext) // Middleware for nested routes
                r.Get("/", getUser)
                r.Put("/", updateUser)
                r.Delete("/", deleteUser)
            })
        })
    })

    http.ListenAndServe(":8080", r)
}

func UserContext(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        userID := chi.URLParam(r, "userID")
        // Load user from database, set in context
        ctx := context.WithValue(r.Context(), "user", userID)
        next.ServeHTTP(w, r.WithContext(ctx))
    })
}

func getUser(w http.ResponseWriter, r *http.Request) {
    userID := r.Context().Value("user").(string)
    // Return user data
    json.NewEncoder(w).Encode(map[string]string{"id": userID})
}

Gin - High Performance Framework

Use When:

  • Need maximum performance (8x faster than most frameworks)
  • Want batteries-included experience
  • Require built-in validation and binding
  • Building JSON APIs with minimal boilerplate

Strengths:

  • Extremely fast (fastest Go framework in benchmarks)
  • Built-in JSON binding and validation
  • Middleware ecosystem
  • Group-based routing
  • Custom error handling

Installation:

go get -u github.com/gin-gonic/gin

Example:

package main

import (
    "net/http"
    "github.com/gin-gonic/gin"
)

type CreateUserRequest struct {
    Name  string `json:"name" binding:"required,min=3"`
    Email string `json:"email" binding:"required,email"`
    Age   int    `json:"age" binding:"required,gte=18"`
}

func main() {
    r := gin.Default() // Logger + Recovery middleware

    api := r.Group("/api/v1")
    {
        users := api.Group("/users")
        {
            users.GET("", listUsers)
            users.POST("", createUser)
            users.GET("/:id", getUser)
            users.PUT("/:id", updateUser)
            users.DELETE("/:id", deleteUser)
        }
    }

    r.Run(":8080")
}

func createUser(c *gin.Context) {
    var req CreateUserRequest

    // Automatic validation based on struct tags
    if err := c.ShouldBindJSON(&req); err != nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }

    // Process user creation
    user := User{
        ID:    generateID(),
        Name:  req.Name,
        Email: req.Email,
        Age:   req.Age,
    }

    c.JSON(http.StatusCreated, user)
}

func getUser(c *gin.Context) {
    id := c.Param("id")

    // Return user
    c.JSON(http.StatusOK, gin.H{
        "id":   id,
        "name": "John Doe",
    })
}

Echo - Enterprise Framework

Use When:

  • Building enterprise applications
  • Need OpenAPI/Swagger integration
  • Want comprehensive middleware library
  • Require type-safe routing and binding

Strengths:

  • Type-safe routing with automatic parameter binding
  • Built-in middleware for common patterns
  • OpenAPI/Swagger generation support
  • Excellent error handling middleware
  • WebSocket support

Installation:

go get -u github.com/labstack/echo/v4

Example:

package main

import (
    "net/http"
    "github.com/labstack/echo/v4"
    "github.com/labstack/echo/v4/middleware"
)

func main() {
    e := echo.New()

    // Middleware
    e.Use(middleware.Logger())
    e.Use(middleware.Recover())
    e.Use(middleware.CORS())

    // Routes
    e.GET("/users/:id", getUser)
    e.POST("/users", createUser)
    e.PUT("/users/:id", updateUser)
    e.DELETE("/users/:id", deleteUser)

    e.Logger.Fatal(e.Start(":8080"))
}

func getUser(c echo.Context) error {
    id := c.Param("id")

    user := User{ID: id, Name: "John Doe"}
    return c.JSON(http.StatusOK, user)
}

func createUser(c echo.Context) error {
    var user User

    if err := c.Bind(&user); err != nil {
        return echo.NewHTTPError(http.StatusBadRequest, err.Error())
    }

    if err := c.Validate(&user); err != nil {

Use this skill in a project

Open any RiverX project, search the Skills panel for bobmatnyc/claude-mpm-skills/golang-http-frameworks, and install it in one click.

Use this skill