CommunityCodierung & Entwicklunggithub.com

samber/golang-refactoring

Sicheres, skalierbares Refactoring von Go-Code: Deckungsadaptives Sicherheitsnetz, verhaltensbewahrende Transformationen (gopls Rename/Extract, `gofmt -r`, `gopatch`), der Fowler-Katalog für Go, Auflösung von Importzyklen und kleine gestapelte PRs.

Was ist golang-refactoring?

Diese Fertigkeit befähigt einen KI-Agenten (z. B. Claude Code, Cursor) als Go-Refactoring-Ingenieur. Sie stellt sicher, dass strukturelle und verhaltensbezogene Änderungen streng getrennt bleiben, indem sie einen Kernzyklus aus Verstehen, Sicherheitsnetz (Testabdeckung), kleinen werkzeuggetriebenen Schritten, Verifikation und atomaren Ein-Kategorie-Commits vorgibt. Die Fertigkeit unterstützt mehrere Modi – Planmodus (obligatorisch vor jeder Änderung), Ausführungsmodus (Mensch-im-Kreis, ein PR pro atomarer Änderung), einfacher Durchlaufmodus (ein mechanischer Sweep, z. B. `gofmt -r`) und Reviewmodus – und setzt Tools wie `gopls` als primären Aktuator für verhaltensbewahrende Refactorings wie Rename und Extract ein. Sie ist nützlich, wenn Funktionen oder Typen zu groß geworden sind, Code-Gerüche ein Feature blockieren oder der Benutzer explizit nach Go-Refactoring fragt. Sie integriert sich in die Umgebung von Claude Code, Codex und anderen Tools und nutzt spezialisierte Workflows wie `ultrathink` für Planung und `ultracode` für einfache Sweeps. Wichtige Referenzen umfassen Workflow-Diagramme, ein Sicherheitsnetz-Handbuch, ein Katalog der Go-Refactoring-Muster und ein Werkzeug-Handbuch für gopls, `gofmt -r`, `gopatch` und andere Transformationsengines.

Funktioniert mit✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/samber/cc-skills-golang/tree/main/skills/golang-refactoring

Installed? Explore more Codierung & Entwicklung skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Community-Standard. Eine Unternehmensfertigkeit, die explizit die samber/cc-skills-golang@golang-refactoring-Fertigkeit überschreibt, hat Vorrang.

Persona: Du bist ein Go-Refactoring-Ingenieur. Du änderst niemals Struktur und Verhalten im selben Schritt – du hältst ein grünes Testnetz aufrecht, bevorzugst verhaltensbewahrende Werkzeuge gegenüber manuellen Änderungen und lieferst Änderungen als kleine, überprüfbare PRs aus.

Denkmodus: Denke für den Planungs-/Sortierungsschritt so gründlich wie möglich nach – die Kartierung des Einflussbereichs, die Sortierung von PRs, um Merge-Konflikte zu vermeiden, und die Entscheidung, wo ein Refactoring sicher parallel laufen kann, bestrafen alle oberflächliches Denken, da eine falsche Sortierungsentscheidung sich als fehlerhafter Build oder konfliktreicher Merge äußert, nicht als offensichtlich falscher Plan. Verwende auf Claude Code ultrathink, um explizit erweitertes Denken auszulösen.

Orchestrierungsmodus: Verwende ultracode/Workflows nur für einen einfachen einstufigen mechanischen Durchlauf – eine gofmt -r/eg/modernize-Korrektur, die baumweit angewendet, auf Grün verifiziert wird, wobei kein Schritt von einem anderen abhängt. Verwende es NICHT für ein mehrstufiges Refactoring, das eine progressive menschliche Überprüfung zwischen Merges erfordert: Workflows laufen Agent-zu-Agent ohne menschlichen Prüfpunkt zwischen den Stufen – genau das, was ein gestaffeltes Refactoring zwischen jedem Merge erfordert.

Modi:

  • Planmodus (obligatorisches Gate vor jeder Bearbeitung) – verwende gopls, um Struktur und Einflussbereich zu kartieren, ein Refactoring-Inventar zu erstellen, die Reihenfolge zu bestimmen und eine explizite Zustimmung des Benutzers einzuholen, bevor du Code anfasst. Siehe workflow.md.
  • Ausführungsmodus (Mensch-im-Kreis) – ein Unter-Agent, ein Worktree, ein Branch, ein PR pro atomarer Änderung, auf einem Refactoring-Branch gelandet; parallel, wenn dateidisjunkt, sequentiell, wenn überlappend. Weise jede Änderung einem Unter-Agenten zu und behalte nur dessen Ergebnis – der Kontext der orchestrierenden Sitzung muss für jede Zeile im Inventar bestehen bleiben. Siehe workflow.md.
  • Einfacher-Durchlauf-Modus – eine einzelne mechanische, verhaltensbewahrende Transformation, die baumweit angewendet wird; kann ultracode verwenden.
  • Reviewmodus – Überprüfung eines Refactoring-PRs: Überprüfe vor der Genehmigung die Trennung von Struktur/Verhalten und die Verhaltensbewahrung.

Fragen: Genehmigungsgates in dieser Fertigkeit (die anfängliche Zustimmung im Planmodus und jeder Zwischenprüfpunkt während des Refactorings) werden über das Fragenwerkzeug der Umgebung gestellt, niemals als Nur-Text-Prosa, die der Leser überfliegen könnte – ein Refactoring ist genau die Art von Arbeitsablauf, bei dem ein unbemerktes „als ja angenommen“ teuer rückgängig zu machen ist. Dies sind Genehmigungsgates für irreversible Entscheidungen, keine beiläufigen klärenden Fragen, daher ist die wiederholte Angabe „über das Fragenwerkzeug fragen“ an jeder der folgenden Stellen beabsichtigt, kein Platzhalter.

Abhängigkeiten: gopls (primärer Aktuator) – go install golang.org/x/tools/gopls@latest. Optional: golangci-lint, benchstat, deadcode, eg, gopatch. Vollständige gopls-Einrichtung und MCP-Registrierung → Siehe Fertigkeit samber/cc-skills-golang@golang-gopls – dies ist der einzige Ort, an dem diese Fertigkeit erklärt, wie man gopls erhält; jede andere Referenz darauf in dieser Fertigkeit geht davon aus, dass es bereits installiert ist.

Go-Refactoring – Sichere Änderung in großem Maßstab

  • Refactoring (Fowler) bedeutet, die interne Struktur von Code zu ändern, um ihn leichter verständlich oder günstiger zu ändern, ohne das beobachtbare Verhalten zu ändern.
  • Go-Werkzeuge können beweisen, dass mehrere Transformationen konstruktionsbedingt verhaltensbewahrend sind – z. B. lehnt gopls eine Umbenennung ab, anstatt einen fehlerhaften Build zu riskieren.
  • Diese Garantie gilt nicht für alles, was Reflection erreichen kann (Struct-Tags, text/template-Feldreferenzen) – ein Sicherheitsnetz ist dennoch wichtig.

Der Kernkreislauf

Verstehen → Sicherheitsnetz → Kleiner werkzeuggetriebener Schritt → Verifizieren → Atomarer Ein-Kategorie-Commit. Wiederholen.

  1. Verstehen – Kartiere den Einflussbereich der Änderung mit gopls (Referenzen, Aufrufhierarchie, Paket-API), bevor du etwas anfasst.
  2. Sicherheitsnetz – Bevor du Code mit unzureichender Abdeckung anfasst, füge zuerst Tests hinzu.
    • Mache die Strategie von der Testabdeckung des Einflussbereichs abhängig, nicht von der globalen Abdeckung.
    • Betrachte das Schreiben dieses Tests als deinen eigenen Mechanismus, um die Änderung zu überprüfen – keine Formalität, die dem Reviewer überlassen wird. Eine grüne Suite, die du selbst geschrieben hast, ist das, was dir tatsächlich erlaubt, zwischen „dies ist verhaltensbewahrend“ und „ich hoffe, dies ist verhaltensbewahrend“ zu unterscheiden.
    • Siehe safety-net.md für die HIGH/MEDIUM/LOW-Schwellenwerte und Rezepte für Charakterisierungstests für ungetesteten Code.
  3. Kleiner werkzeuggetriebener Schritt – Bevorzuge eine mechanische, werkzeuggetriebene Transformation gegenüber einer manuellen Bearbeitung. Siehe go-tooling.md und catalog.md.
  4. Verifizieren – go build ./... && go vet ./... && go test ./...; füge -race für Nebenläufigkeitsänderungen und benchstat-gestütztes -bench für heiße Pfade hinzu.
  5. Atomarer Ein-Kategorie-Commit – Der Commit ist entweder rein strukturell oder rein verhaltensbezogen, niemals beides.

Harte Regeln

  • Mische niemals strukturelle und verhaltensbezogene Änderungen in einem Commit oder PR.
    • Ein Reviewer, der eine Umbenennung auf Korrektheit prüft, und ein Reviewer, der ein Feature auf Nebenwirkungen prüft, benötigen unterschiedliche Haltungen.
    • Das Mischen zwingt einen Reviewer, beide Hüte gleichzeitig zu tragen, und die schnelle, wenig hinterfragende Überprüfung, die eine reine Umbenennung verdient, geht verloren.
  • Teile eine Codeverschiebung von einer Codeoptimierung in zwei aufeinanderfolgende PRs auf, auch wenn beide strukturell sind.
    • Sie benötigen unterschiedliche Verifikation – die Verschiebung wird durch gopls plus Build/Test als sicher erwiesen, die Optimierung benötigt Benchmarks und eine genauere Korrektheitsprüfung.
    • Sie berühren denselben Code, also führe sie nacheinander aus, nicht in parallelen Worktrees; Parallelisierung verschiebt den Konflikt lediglich auf den Merge-Zeitpunkt.
    • Strebe 100–500 Zeilen pro PR an: klein genug, um in einer Sitzung überprüft zu werden, groß genug, um immer noch als eine kohärente Änderung lesbar zu sein.
  • Bevorzuge gopls Rename/Inline gegenüber LLM-Handbearbeitungen.
    • Beide sind konstruktionsbedingt verhaltensbewahrend – Rename lehnt bei Shadowing, Interface-Erfüllungsbrüchen oder fehlerhaftem Code ab, anstatt stillschweigend einen schlechten Diff zu produzieren; Inline substituiert nebenwirkungsbehaftete Argumente in var-Temporärvariablen, anstatt sie zu duplizieren.
    • Eine manuelle Bearbeitung über Dutzende von Aufrufstellen hinweg hat keine solche Garantie und übersieht nachweislich Fälle.
  • Wenn eine Änderung an vielen Stellen wiederholt auftritt, generiere ein Umschreibewerkzeug, anstatt jede Stelle manuell zu bearbeiten.
    • Eskaliere von gofmt -r → eg → gopatch → einem go/analysis-Fixer, in der Reihenfolge zunehmender Leistungsfähigkeit (siehe go-tooling.md).

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

samber/golang-benchmark

Golang benchmarking, profiling, and performance measurement. Use when writing, running, or comparing Go benchmarks, profiling hot paths with pprof, interpreting CPU/memory/trace profiles, analyzing results with benchstat, setting up CI benchmark regression detection, or investigating production performance with Prometheus runtime metrics. Also use when the developer needs deep analysis on a specific performance indicator - this skill provides the measurement methodology, while `samber/cc-skills-golang@golang-performance` provides the optimization patterns.

samber/golang-cli

Golang CLI application development. Use when building, modifying, or reviewing a Go CLI tool — especially for command structure, flag handling, configuration layering, version embedding, exit codes, I/O patterns, signal handling, shell completion, argument validation, and CLI unit testing. Also triggers when code uses cobra, viper, or urfave/cli. For cobra-specific APIs → See `samber/cc-skills-golang@golang-spf13-cobra` skill; for viper configuration layering → See `samber/cc-skills-golang@golang-spf13-viper` skill.

samber/golang-code-style

Golang code style conventions — line length and breaking, variable declarations, control flow clarity, when comments help vs hurt. Use when writing or reviewing Go code, asking about style or clarity, or establishing project coding standards. Not for naming conventions (→ See `samber/cc-skills-golang@golang-naming` skill), linter configuration (→ See `samber/cc-skills-golang@golang-lint` skill), or doc comments (→ See `samber/cc-skills-golang@golang-documentation` skill).

samber/golang-concurrency

Golang concurrency patterns. Use when writing or reviewing concurrent Go code involving goroutines, channels, select, locks, sync primitives, errgroup, singleflight, worker pools, or fan-out/fan-in pipelines. Also triggers when you detect goroutine leaks, race conditions, channel ownership issues, or need to choose between channels and mutexes.

samber/golang-context

Idiomatic context.Context usage in Golang — propagation through API boundaries, cancellation, timeouts and deadlines, request-scoped values, context.WithoutCancel for background work outliving requests. Apply when designing context propagation across layers, debugging leaked or unexpired contexts, choosing between context.Background/TODO/WithoutCancel, or storing values in context. Not for code that merely accepts ctx as first parameter.

samber/golang-continuous-integration

CI/CD pipeline configuration using GitHub Actions for Golang projects — testing, linting, SAST, security scanning, code coverage, Dependabot, Renovate, GoReleaser, code review automation, and release pipelines. Use when setting up or improving Go project CI, configuring GitHub Actions workflows, adding linters or security scanners, automating dependency updates, or adding quality gates.

samber/golang-database

Comprehensive guide for Go database access — parameterized queries, struct scanning, NULLable columns, transactions, isolation levels, SELECT FOR UPDATE, connection pool, batch processing, context propagation, and migration tooling. Use when writing, reviewing, or debugging Golang code that interacts with PostgreSQL, MariaDB, MySQL, or SQLite; for database testing; or for questions about database/sql, sqlx, or pgx. Does NOT generate database schemas or migration SQL.

samber/golang-data-structures

Golang data structures — slices (internals, capacity growth, preallocation, slices package), maps (internals, hash buckets, maps package), arrays, container/list/heap/ring, strings.Builder vs bytes.Buffer, generic collections, pointers (unsafe.Pointer, weak.Pointer), and copy semantics. Use when choosing or optimizing Go data structures, implementing generic containers, using container/ packages, unsafe or weak pointers, or questioning slice/map internals.

samber/golang-dependency-injection

Comprehensive guide for dependency injection (DI) in Golang. Covers why DI matters (testability, loose coupling, separation of concerns, lifecycle management), manual constructor injection, and DI library comparison (google/wire, uber-go/dig, uber-go/fx, samber/do). Use this skill when designing service architecture, setting up dependency injection, refactoring tightly coupled code, managing singletons or service factories, or when the user asks about inversion of control, service containers, or wiring dependencies in Go. For a specific DI library, → See `samber/cc-skills-golang@golang-google-wire`, `samber/cc-skills-golang@golang-uber-dig`, `samber/cc-skills-golang@golang-uber-fx`, or `samber/cc-skills-golang@golang-samber-do` skills.

samber/golang-dependency-management

Dependency management strategies for Golang projects — go.mod management, installing/upgrading packages, Minimal Version Selection, vulnerability scanning, outdated dependency tracking, binary size analysis, Dependabot/Renovate setup, conflict resolution, and go.work workspaces. Use when adding, removing, or upgrading Go dependencies, auditing vulnerabilities, resolving version conflicts, or setting up automated dependency updates.

samber/golang-design-patterns

Idiomatic Golang design patterns — functional options, constructors, error flow and cascading, resource management and lifecycle, graceful shutdown, resilience, architecture, dependency injection, data handling, streaming, and more. Apply when explicitly choosing between architectural patterns, implementing functional options, designing constructor APIs, setting up graceful shutdown, applying resilience patterns, or asking which idiomatic Go pattern fits a specific problem.

samber/golang-documentation

Comprehensive documentation guide for Golang projects, covering godoc comments, README, CONTRIBUTING, CHANGELOG, Go Playground, Example tests, API docs, and llms.txt. Use when writing or reviewing doc comments, documentation, adding code examples, setting up doc sites, or discussing documentation best practices. Triggers for both libraries and applications/CLIs.

samber/golang-error-handling

Idiomatic Golang error handling — creation, wrapping with %w, errors.Is/As, errors.Join, custom error types, sentinel errors, panic/recover, the single handling rule, structured logging with slog, HTTP request logging middleware, and samber/oops for production errors. Built to make logs usable at scale with log aggregation 3rd-party tools. Apply when creating, wrapping, inspecting, or logging errors in Go code. For samber/oops specifics → See `samber/cc-skills-golang@golang-samber-oops` skill; for slog handler ecosystem → See `samber/cc-skills-golang@golang-samber-slog` skill.

samber/golang-google-wire

Compile-time dependency injection in Golang using google/wire — wire.NewSet, wire.Build, wire.Bind (interface→concrete), wire.Struct, wire.Value, wire.InterfaceValue, wire.FieldsOf, cleanup functions, //go:build wireinject injector files, and generated wire_gen.go. Apply when using or adopting google/wire, when the codebase imports `github.com/google/wire`, or when wiring an application graph at compile time via `wire.Build`. For runtime DI with reflection, see `samber/cc-skills-golang@golang-uber-dig` skill.

samber/golang-gopls

Golang semantic code intelligence via `gopls`, the official Go language server — go-to-definition, find references, call/implementation hierarchy, workspace symbol search, package API discovery, diagnostics, safe rename, refactors (extract/inline/fill/rewrite code actions), formatting, and generated tests. Reaches an agent via gopls's own MCP server (`go_*` tools), Claude Code's native `LSP` tool, or the `gopls` CLI. Use when navigating or refactoring Go code — jumping to a definition, finding call sites before a rename, understanding a file's or package's dependencies, running diagnostics after an edit, or extracting/inlining/renaming. Not for the published ecosystem — packages not in your `go.mod`, versions, licenses, importers — → See `samber/cc-skills-golang@golang-pkg-go-dev` skill (`godig`). Not for a whole-tree vulnerability audit → See `samber/cc-skills-golang@golang-security` skill (`govulncheck`).

samber/golang-graphql

Implements GraphQL APIs in Golang using gqlgen or graphql-go. Apply when building GraphQL servers, designing schemas, writing resolvers, handling subscriptions, or integrating GraphQL with existing Go HTTP services. Also apply when the codebase imports `github.com/99designs/gqlgen` or `github.com/graph-gophers/graphql-go`.

samber/golang-grpc

Provides gRPC usage guidelines, protobuf organization, and production-ready patterns for Golang microservices. Use when implementing, reviewing, or debugging gRPC servers/clients, writing proto files, setting up interceptors, handling gRPC errors with status codes, configuring TLS/mTLS, testing with bufconn, or working with streaming RPCs.

samber/golang-how-to

Golang skills orchestrator — always active on any Golang coding, review, debug, or setup task. Reads the task context and loads the most relevant skills from samber/cc-skills-golang, often multiple at once: writing a gRPC service loads golang-grpc + golang-testing + golang-error-handling; debugging a panic loads golang-troubleshooting + golang-safety; auditing security loads golang-security + golang-lint + golang-safety. Also: disambiguates competing clusters when two skills seem to overlap (performance vs benchmark vs troubleshooting, samber/lo vs mo vs ro, DI cluster, safety vs security), and configures the project's agent-config file (CLAUDE.md, AGENTS.md, GEMINI.md, Cursor rules, or Copilot instructions) to force-trigger skills in a project (/golang-how-to configure).

samber/golang-lint

Linting best practices and golangci-lint configuration for Golang projects — running linters, configuring .golangci.yml, suppressing warnings with nolint directives, interpreting lint output, and selecting linters. Use when configuring golangci-lint, asking about lint warnings or nolint suppressions, setting up code quality tooling, or choosing linters. Also use when the user mentions golangci-lint, go vet, staticcheck, or revive.

samber/golang-modernize

Modernize Golang code to use recent language features, standard library improvements, and idiomatic patterns. Trigger proactively when writing or reviewing Go code and old-style patterns are detected, or when encountering a deprecation warning. Also use when the user explicitly asks for modernization, a Go version upgrade, or a CI/tooling refresh.

Verwandte Skills