mirror of
https://github.com/labstack/echo.git
synced 2025-09-16 09:16:29 +02:00
99 lines
3.1 KiB
Markdown
99 lines
3.1 KiB
Markdown
![]() |
# 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:
|
||
|
```bash
|
||
|
# 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
|