1
0
mirror of https://github.com/labstack/echo.git synced 2025-09-16 09:16:29 +02:00
Files
echo/CLAUDE.md
Vishal Rana a92f4209c6 Fix IP extraction fallback and improve Response.Flush error messages
Fixes two issues:

1. extractIP now handles RemoteAddr without port (#2757)
   - Previously returned empty string for addresses like "192.168.1.1"
   - Now validates with net.ParseIP and returns the IP directly
   - Maintains full backwards compatibility for existing behavior

2. Response.Flush uses modern error handling (#2789)
   - Replaces type assertion with http.NewResponseController
   - Provides descriptive panic message with ResponseWriter type info
   - Improves debugging experience when flushing is not supported

Both changes maintain full backwards compatibility while fixing edge cases.

Closes #2757
Closes #2789

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-15 17:52:30 -07:00

3.1 KiB

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

About This Project

Echo is a high performance, minimalist Go web framework. This is the main repository for Echo v4, which is available as a Go module at github.com/labstack/echo/v4.

Development Commands

The project uses a Makefile for common development tasks:

  • make check - Run linting, vetting, and race condition tests (default target)
  • make init - Install required linting tools (golint, staticcheck)
  • make lint - Run staticcheck and golint
  • make vet - Run go vet
  • make test - Run short tests
  • make race - Run tests with race detector
  • make benchmark - Run benchmarks

Example commands for development:

# Setup development environment
make init

# Run all checks (lint, vet, race)
make check

# Run specific tests
go test ./middleware/...
go test -race ./...

# Run benchmarks
make benchmark

Code Architecture

Core Components

Echo Instance (echo.go)

  • The Echo struct is the top-level framework instance
  • Contains router, middleware stacks, and server configuration
  • Not goroutine-safe for mutations after server start

Context (context.go)

  • The Context interface represents HTTP request/response context
  • Provides methods for request/response handling, path parameters, data binding
  • Core abstraction for request processing

Router (router.go)

  • Radix tree-based HTTP router with smart route prioritization
  • Supports static routes, parameterized routes (/users/:id), and wildcard routes (/static/*)
  • Each HTTP method has its own routing tree

Middleware (middleware/)

  • Extensive middleware system with 50+ built-in middlewares
  • Middleware can be applied at Echo, Group, or individual route level
  • Common middleware: Logger, Recover, CORS, JWT, Rate Limiting, etc.

Key Patterns

Middleware Chain

  • Pre-middleware runs before routing
  • Regular middleware runs after routing but before handlers
  • Middleware functions have signature func(next echo.HandlerFunc) echo.HandlerFunc

Route Groups

  • Routes can be grouped with common prefixes and middleware
  • Groups support nested sub-groups
  • Defined in group.go

Data Binding

  • Automatic binding of request data (JSON, XML, form) to Go structs
  • Implemented in binder.go with support for custom binders

Error Handling

  • Centralized error handling via HTTPErrorHandler
  • Automatic panic recovery with stack traces

File Organization

  • Root directory: Core Echo functionality (echo.go, context.go, router.go, etc.)
  • middleware/: All built-in middleware implementations
  • _test/: Test fixtures and utilities
  • _fixture/: Test data files

Code Style

  • Go code uses tabs for indentation (per .editorconfig)
  • Follows standard Go conventions and formatting
  • Uses gofmt, golint, and staticcheck for code quality

Testing

  • Standard Go testing with testing package
  • Tests include unit tests, integration tests, and benchmarks
  • Race condition testing is required (make race)
  • Test files follow *_test.go naming convention