From e250cb2d4c6ce6371e39a24d53ee9b40c13ec323 Mon Sep 17 00:00:00 2001 From: mathias Date: Tue, 12 May 2026 15:22:34 +0000 Subject: [PATCH] feat: add go-patterns context skill --- .context/skills/go-patterns.md | 37 ++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 .context/skills/go-patterns.md diff --git a/.context/skills/go-patterns.md b/.context/skills/go-patterns.md new file mode 100644 index 0000000..cd87180 --- /dev/null +++ b/.context/skills/go-patterns.md @@ -0,0 +1,37 @@ +# Skill: Go project patterns + +## New endpoint checklist +1. Define request/response types in `types.go` +2. Write handler in `handlers.go` using `http.HandlerFunc` +3. Add route in `routes.go` +4. Write table-driven test in `handlers_test.go` +5. Run `task check` before committing + +## Error handling pattern +```go +if err != nil { + return fmt.Errorf("descriptiveOperation: %w", err) +} +``` +Never log and return — do one or the other. + +## HTMX response pattern +```go +func (h *Handler) ListItems(w http.ResponseWriter, r *http.Request) { + items, err := h.store.List(r.Context()) + if err != nil { + http.Error(w, "failed to list items", http.StatusInternalServerError) + return + } + if r.Header.Get("HX-Request") == "true" { + h.templates.Render(w, "items/_list", items) + return + } + h.templates.Render(w, "items/index", items) +} +``` + +## Dependency policy +- Prefer stdlib: `net/http`, `encoding/json`, `database/sql` +- Allowed without justification: `testify`, `slog`, `templ`, `sqlc` +- Needs justification in commit message: anything else