Prescriptive. Follow these when writing Go code.
A pattern is a reusable solution to a recurring problem. Each one has:
- When to use — the problem it solves
- When NOT to use — where it causes harm
- Why — the reasoning, not just the rule
- Source citations — verified file:line from real codebases
These are derived from what mature Go codebases actually do, not opinions or blog posts.
patterns/— what to do (interfaces, errors, concurrency, testing, packages, etc.)smells/— what NOT to do (anti-patterns, common mistakes)sources/— reference material from specific projects (golang/go, Prometheus). Study for ideas, don't copy blindly.
Give your agent these instructions depending on the task:
You have access to a patterns repo containing proven solutions to recurring Go problems. When I describe a problem:
- Identify which pattern files are relevant (read them)
- Check if my problem matches a "When to use" case
- Check if it matches a "When NOT to use" case
- If a pattern fits: suggest the approach, cite the pattern, explain why it applies here
- If no pattern fits: say so, and suggest an approach grounded in the principles you see across the patterns
- If my problem matches a smell: warn me before I make the mistake
Never suggest something that contradicts a documented pattern without explicitly calling out the deviation and justifying it.
You have access to a patterns repo that defines how Go code should be written. For each file in the diff:
- Read the relevant pattern files
- Verify the code follows the documented patterns
- If it deviates: flag it with a reference to the specific pattern, section, and why it matters
- If it matches a smell: flag it as a known anti-pattern
- A deviation without justification is a finding
Don't invent rules. Only flag what the patterns document.
Read the pattern file. Compare against how the following projects handle the same problem: [list projects]. Does the pattern hold? Are there cases where it breaks down? Should it be updated, split, or retired? File your findings as an issue.
Pattern = prescriptive. "When you face X, do Y." Language-scoped. Follow these.
Convention = descriptive. "Project Z does it this way." Context-specific. Study for ideas — applying another project's conventions to yours without understanding their constraints causes harm.
The sources/ directory is convention material absorbed from thin repos. The patterns/ directory is what you actually follow.