From first-plan
Analyzes Go projects during discovery phase when go.mod detected. Extracts layout (cmd/internal/pkg), error handling, context.Context, concurrency patterns, code generation, build tags, testing, DI, and logging conventions.
How this skill is triggered — by the user, by Claude, or both
Slash command
/fp:lens-goThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
- `cmd/<name>/main.go` -> binário (CLI ou serviço HTTP)
cmd/<name>/main.go -> binário (CLI ou serviço HTTP)internal/ -> lib privada do módulopkg/ -> lib públicago.mod em raiz com poucas pastas -> lib pequenago.work -> monorepo GoFrameworks comuns a detectar via imports:
net/http puro = HTTP stdlibchi, gin, echo, fiber, gorilla/mux = routergqlgen, graph-gophers/graphql-go = GraphQLgrpc-go = gRPCcobra, urfave/cli = CLIkafka-go, segmentio/kafka-go, IBM/sarama = Kafkastreadway/amqp, rabbitmq/amqp091-go = RabbitMQcmd/, internal/, pkg/cmd/<name>/main.go?)handler/, service/, repository/?errors.New vs fmt.Errorf vs errors.WrapError() string)errors.Is / errors.Aspkg/errors, cockroachdb/errors, hashicorp/go-multierror)Verificar:
context.Context é primeiro parametro? (idiomatic)context.Background() ou context.TODO() em produção? (smell)context.WithTimeout / WithCancelsync.WaitGroup para coordenar?errgroup.Group (golang.org/x/sync)?go generate directive em arquivos?mockgen, mockery para mocks?sqlc, oapi-codegen, protoc-gen-go?*.gen.go, *.pb.go, wire_gen.go)//go:build <tag> em arquivosintegration, e2e, wireinject_test.go irmão de cada arquivo?testify/assert ou stdlib?t.Run em loop)?integration)?NewService(deps...))wire (Google) com wire.go/wire_gen.go?fx (Uber)?log stdlib?slog (Go 1.21+)?logrus, zap, zerolog?.first-plan/| Categoria | Arquivo | Conteúdo |
|---|---|---|
| Stack | 01-topology/stacks.md | versão Go, framework, papel |
| Layout | 01-topology/architecture.md | diagrama cmd/internal/pkg |
| Boundaries | 01-topology/boundaries.md | rotas HTTP, gRPC services, mensageria |
| Errors | 02-conventions/errors.md | padrão Go-específico |
| Testing | 02-conventions/testing.md | testify vs stdlib, table-driven |
| DI | 02-conventions/di.md | manual / wire / fx |
| Logging | 02-conventions/logging.md | slog / zap / etc |
| Reuse | 03-reuse/utils.md | funções em pkg/, helpers em internal/util/ |
Aumentar quando:
Reduzir quando:
errors.New e fmt.Errorf sem padrão clarolog stdlib + slog + zap (migração em curso)context.TODO() em produção (debt)Reportar em 06-rationale/dont.md se detectado:
panic() em handler HTTP sem recover middlewaretime.Sleep em código de produção (em vez de time.After + select)_, _ = ...init() com side effects pesadosnpx claudepluginhub vynazevedo/first-plan --plugin fpRecommends and scaffolds idiomatic Go project layouts for CLI, API, library, or monorepo based on type and size. Flags anti-patterns and suggests migrations.
Guides Go code organization: package structure, naming conventions, project layout, imports, file splitting. Reviews PRs, audits, and refactors boundaries.
Applies Go best practices for performance, modern syntax, generics, patterns, testing, error handling, and concurrency when writing or reviewing Go code.