Go project structure -- cmd/internal layout, handler/service/repository layers, Makefile, config from environment, domain error types, test placement, dependency injection
90
84%
Does it follow best practices?
Impact
100%
1.02xAverage score across 5 eval scenarios
Passed
No known issues
{
"instruction": "Separate HTTP handlers from business logic and data access into distinct packages",
"relevant_when": "Agent builds a Go web API with database access",
"context": "Go web services must separate concerns into layers: handler (HTTP request/response), service (business logic), and repository (database queries). Each layer is a separate package under internal/. Handlers never contain SQL or business rules. Services define interfaces for their dependencies (repositories). Repositories return domain types, not raw SQL results.",
"sources": [
{
"type": "file",
"filename": "skills/go-project-structure/SKILL.md",
"tile": "tessl-labs/go-project-structure@0.2.0"
}
],
"checklist": [
{
"name": "handler-layer-separated",
"rule": "HTTP handlers are in their own package (internal/handler/) and contain only request parsing, response writing, and route registration -- no SQL queries or complex business logic",
"relevant_when": "Agent creates a Go web API"
},
{
"name": "service-layer-exists",
"rule": "Business logic is in a service package (internal/service/) separate from HTTP handlers and database code",
"relevant_when": "Agent creates a Go web API with business logic"
},
{
"name": "repository-layer-exists",
"rule": "Database queries are in a repository or store package (internal/repository/ or internal/store/) separate from handlers",
"relevant_when": "Agent creates a Go web API with database access"
},
{
"name": "interfaces-for-dependencies",
"rule": "Service layer defines interfaces for its repository dependencies, enabling testability",
"relevant_when": "Agent creates service and repository packages"
}
]
}