From claude-resources
Go-specific style conventions. gofmt, naming, receiver types, import grouping, linting config. Extends core/style with Go idioms.
npx claudepluginhub deandum/claude-resources --plugin go-skillsThis skill uses the workspace's default tool permissions.
Derived from Effective Go, Google's Go Style Guide, Uber's Go Style Guide.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Guides agent creation for Claude Code plugins with file templates, frontmatter specs (name, description, model), triggering examples, system prompts, and best practices.
Derived from Effective Go, Google's Go Style Guide, Uber's Go Style Guide.
gofmt/goimports — non-negotiable. Local: goimports -w ./.... CI: gofmt -l ./... | tee /dev/stderr should produce no output (fail the build if it does).import (
"context"
"fmt"
"github.com/jackc/pgx/v5"
"github.com/myorg/myservice/internal/domain"
)
Packages: short, lowercase, single-word. No underscores/mixedCaps. httputil not http_util. Avoid util, common, helpers.
Variables/Functions: MixedCaps exported, mixedCaps unexported. Short for narrow scopes (i, r, ctx), descriptive for wide (userRepository).
Initialisms: all caps — URL, ID, HTTP, API. userID not userId.
Getters/Setters: Owner() not GetOwner(). SetOwner().
Interfaces: -er suffix for single-method (Reader, Writer). Define where used, not implemented. Accept interfaces, return concrete types.
Errors: ErrNotFound (sentinel), *NotFoundError (type). No SCREAMING_SNAKE_CASE.
var mu sync.Mutex; mu.Lock()New constructors when init requiredWithTimeout(d), WithLogger(l)sync.Mutex → pointerT uses a pointer receiver (*T), every method on T should use a pointer receiver. Mixing pointer and value receivers on the same type is a bug waiting to happen — callers can silently lose writes, and method sets differ between T and *T in ways that break interface satisfaction.any/interface{} when concrete type worksinit() functions for business logic — acceptable only for side-effect registration (Cobra commands, flag parsers, test fixtures)bool params (use named types)Use .golangci.yml from templates/golangci.yml.
gofmt -l ./... produces no outputgoimports -w ./... has been run (import groups stdlib / external / internal)golangci-lint run passes with no warnings or errorsID, URL, HTTP, API — not Id, Url)