mirror of
https://github.com/labstack/echo.git
synced 2025-12-24 00:01:26 +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
Echostruct 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
Contextinterface 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.gowith 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
testingpackage - Tests include unit tests, integration tests, and benchmarks
- Race condition testing is required (
make race) - Test files follow
*_test.gonaming convention