About solid-go
solid-go is a skill for modular Go architecture, defining feature directories, interface placement and size, and providing SOLID references and implementation templates. It is for Go developers seeking consistent code organization, reuse, and dependency-injection practices.
Key features
- 01Requires feature-based code modules
- 02Restricts interfaces to ports directories
- 03Sets file and handler size limits
- 04Requires small interfaces and godoc comments
- 05Provides SOLID and architecture references
- 06Includes module and test templates
Use cases
- 01Plan directories for Go feature modules
- 02Split oversized handlers or interfaces
- 03Check shared code before adding features
- 04Scaffold services and HTTP handlers
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ fusengine/ agents --skill solid-goAfter installing, type/solid-goin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
references/architecture-patterns.mddependency-inversion.mdinterface-segregation.mdliskov-substitution.mdopen-closed.mdsingle-responsibility.mdsolid-principles.mdreferences/templates/error.mdhandler.mdinterface.mdmodule.mdservice.mdtest.mdDetails
From the project READMEBefore writing any new code it requires a DRY check against internal/core/services and internal/core/ports. See solid-principles.md for the overview, the per-principle references for SRP/OCP/LSP/ISP/DIP detail, architecture-patterns.md for hexagonal/modular layout, and the templates for module/service/interface/handler/error/test scaffolding.
SOLID Go - Modular Architecture
Agent Workflow (MANDATORY)
Before ANY implementation, spawn 3 agents in parallel, one Agent call each with a name:
- fuse-ai-pilot:explore-codebase - Analyze existing architecture
- fuse-ai-pilot:research-expert - Verify Go docs via Context7
- fuse-ai-pilot:sniper - Post-implementation validation
DRY - Reuse Before Creating (MANDATORY)
Before writing ANY new code:
- Grep the codebase for similar interfaces, services, or logic
- Check shared locations:
internal/core/services/,internal/core/ports/ - If similar code exists -> extend/reuse instead of duplicate
- If code will be used by 2+ features -> create it in
internal/core/
Architecture (Modules MANDATORY)
| Layer | Location | Max Lines |
|---|---|---|
| Handlers | internal/modules/[feature]/handlers/ | 50 |
| Services | internal/modules/[feature]/services/ | 100 |
| Repositories | internal/modules/[feature]/repositories/ | 100 |
| Ports (interfaces) | internal/modules/[feature]/ports/ | 30 |
| Models | internal/modules/[feature]/models/ | 50 |
| Shared | internal/core/{services,ports,models}/ | - |
NEVER use flat internal/ structure - always internal/modules/[feature]/
Critical Rules (MANDATORY)
| Rule | Value |
|---|---|
| File limit | 100 lines (split at 90) |
| Handlers | < 50 lines, delegate to services |
| Interfaces | ports/ directory ONLY |
| Godoc | Every exported function documented |
| Accept interfaces | Return structs |
| Small interfaces | 1-3 methods max (Go idiom) |
Reference Guide
Concepts
| Topic | Reference | When to consult |
|---|---|---|
| SOLID Overview | solid-principles.md | Quick reference |
| SRP | single-responsibility.md | Fat structs |
| OCP | open-closed.md | Adding providers |
| LSP | liskov-substitution.md | Contracts |
| ISP | interface-segregation.md | Fat interfaces |
| DIP | dependency-inversion.md | Injection |
| Architecture | architecture-patterns.md | Hex/modular |
Templates
| Template | When to use |
|---|---|
| module.md | Feature module structure |
| service.md | Business logic service |
| interface.md | Port definition |
| handler.md | HTTP handler |
| error.md | Custom errors |
| test.md | Table-driven tests |
Forbidden
| Anti-Pattern | Fix |
|---|---|
| Files > 100 lines | Split at 90 |
| Interfaces in impl files | Move to ports/ directory |
| Fat interfaces (4+ methods) | Split into small interfaces |
Flat internal/ structure | Use internal/modules/[feature]/ |
init() for dependency wiring | Use constructor injection |