mirror of
https://github.com/labstack/echo.git
synced 2025-09-16 09:16:29 +02:00
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>
3.1 KiB
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 golintmake vet
- Run go vetmake test
- Run short testsmake race
- Run tests with race detectormake 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