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

golang-architecture

golang-architecture

【数据与研究】Structure Go code with package-first boundaries, `cmd/` and `internal/`, and explicit dependency wiring. Use when shaping project layout, package ownership, or service boundaries in Go; defer Redis/cache-specific implementation recipes to database skills.

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

技能说明

GitHub

name: golang-architecture description: Structure Go code with package-first boundaries, cmd/ and internal/, and explicit dependency wiring. Use when shaping project layout, package ownership, or service boundaries in Go; defer Redis/cache-specific implementation recipes to database skills. metadata: triggers: files: - 'go.mod' - 'internal/**' keywords: - architecture - structure - folder layout - clean arch - dependency injection

Golang Architecture

Priority: P0 (CRITICAL)

Rules

  • Package-first design: organize by domain/capability before package-by-layer sprawl.
  • Layout: cmd/ for binaries, internal/ for private app code, pkg/ only for intentional reuse.
  • Wiring: compose dependencies in main or dedicated constructors, not via hidden globals.
  • Interfaces: define small interfaces on the consumer side.
  • Context: pass context.Context across I/O and request boundaries.

Recipe

  1. Place the entrypoint in cmd/<app>.
  2. Create domain-owned packages under internal/.
  3. Expose constructors for services, repositories, and handlers.
  4. Keep business rules out of transport packages.
  5. Wire logging, config, DB, and HTTP server at startup.

Verify

  • No package-level mutable singletons control runtime behavior.
  • Imports flow inward; transport and storage packages do not pull business rules outward.
  • Interfaces live with callers that need substitution.
  • main wires dependencies but does not hold business logic.
  • Request and DB paths accept context.Context.

Anti-Patterns

  • No package soup: avoid dumping unrelated code into internal/shared or pkg/utils.
  • No global singletons: use constructors; avoid package-level mutable variables.
  • No god services: split orchestration by capability.
  • No fake Clean Architecture theatre: package names must match real ownership.

References

Canonical response anchors

When this skill applies, preserve the following domain terminology or equivalent concrete examples in the answer when relevant:

  • inject
我的收藏