CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl-labs/go-project-structure

Go project structure -- cmd/internal layout, handler/service/repository layers, Makefile, config from environment, domain error types, test placement, dependency injection

90

1.02x
Quality

84%

Does it follow best practices?

Impact

100%

1.02x

Average score across 5 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

handler-service-repository.jsonverifiers/

{
  "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"
    }
  ]
}

tile.json