界面已本地化;技能介绍与说明文档按所选语言由 AI 自动翻译,代码、命令、路径和专业术语保留原文,以原作者文档为准。
探索技能
设计与创意 · SKILL.md

go-cli-application-architecture

go-cli-application-architecture

【设计与创意】Design and review maintainable Go CLI application boundaries, package layout, dependency direction, command factories, configuration ownership, adapters, services, storage, and composition roots. Use when starting a multi-command CLI, extracting business logic from Cobra, untangling globals, adding external dependencies, or deciding what belongs unde…

独立 GitHub 快照 · 自动分类 · 以原作者文档为准

技能说明

GitHub

name: go-cli-application-architecture description: Design and review maintainable Go CLI application boundaries, package layout, dependency direction, command factories, configuration ownership, adapters, services, storage, and composition roots. Use when starting a multi-command CLI, extracting business logic from Cobra, untangling globals, adding external dependencies, or deciding what belongs under cmd, internal, or reusable packages. license: MIT compatibility: Codex, Claude Code, and other Agent Skills-compatible clients. metadata: version: "0.3.0" displayName: Go CLI Application Architecture category: Go tags: go,golang,cli,architecture,packages,dependency-injection

Go CLI Application Architecture

Organize around dependency direction and testable behavior, not a copied folder template. Keep CLI framework code as an adapter around application services.

Core Workflow

  1. Identify commands, domain actions, external effects, and shared policies.
  2. Separate parsing/rendering from application orchestration and adapters.
  3. Define interfaces at the consumer that needs substitution.
  4. Construct dependencies once in a composition root and pass them explicitly.
  5. Keep configuration immutable after validation; give mutable state a dedicated store.
  6. Record ownership and cleanup for every acquired resource and background task.
  7. Test inward from pure logic to adapters and one assembled executable path.

Read Next

TaskLoad
Design or refactor boundariesguidelines.md, workflows/design-application-boundaries.md
Review ownership and cleanupworkflows/review-resource-lifecycle.md
Decide package and interface placementreferences/application-architecture/rules.md
Review patterns and examplesreferences/application-architecture/examples.md
Understand dependency directionreferences/application-architecture/knowledge.md

Guardrails

  • Do not put domain behavior in Cobra Run functions.
  • Avoid a central interfaces package and broad catch-all service abstractions.
  • Do not use package globals or init for dependency construction.
  • Keep fallible I/O and order-dependent startup out of init; use explicit composition.
  • Keep runtime configuration distinct from mutable application storage.
  • Add layers only when they create a real seam, invariant, or dependency boundary.

Source Notes

Guidance is transformed and paraphrased from Marian Montagnino, Building Modern CLI Applications in Go (Packt, 2023), especially Chapters 2-3, with original adaptations aligned to current Go conventions.

Concrete-first interfaces, dependency ownership, and adapter lifecycle guidance also incorporates transformed material from Inanc Gumus, Go by Example: Programmer's Guide to Idiomatic and Testable Programs (Manning, 2025), Chapters 5 and 8-10.

Initialization and lifecycle guidance also incorporates transformed material from Teiva Harsanyi, 100 Go Mistakes and How to Avoid Them (Manning, 2022), Chapters 2, 6, 7, and 10.

我的收藏