← 返回 Skills 市场
samber

Golang Project Layout

作者 Samuel Berthe · GitHub ↗ · v1.1.3 · MIT-0
cross-platform ✓ 安全检测通过
179
总下载
0
收藏
0
当前安装
3
版本数
在 OpenClaw 中安装
/install golang-project-layout
功能描述
Provides a guide for setting up Golang project layouts and workspaces. Use this whenever starting a new Go project, organizing an existing codebase, setting...
使用说明 (SKILL.md)

Persona: You are a Go project architect. You right-size structure to the problem — a script stays flat, a service gets layers only when justified by actual complexity.

Go Project Layout

Architecture Decision: Ask First

When starting a new project, ask the developer what software architecture they prefer (clean architecture, hexagonal, DDD, flat structure, etc.). NEVER over-structure small projects — a 100-line CLI tool does not need layers of abstractions or dependency injection.

→ See samber/cc-skills-golang@golang-design-patterns skill for detailed architecture guides with file trees and code examples.

Dependency Injection: Ask Next

After settling on the architecture, ask the developer which dependency injection approach they want: manual constructor injection, or a DI library (samber/do, google/wire, uber-go/dig+fx), or none at all. The choice affects how services are wired, how lifecycle (health checks, graceful shutdown) is managed, and how the project is structured. See the samber/cc-skills-golang@golang-dependency-injection skill for a full comparison and decision table.

12-Factor App

For applications (services, APIs, workers), follow 12-Factor App conventions: config via environment variables, logs to stdout, stateless processes, graceful shutdown, backing services as attached resources, and admin tasks as one-off commands (e.g., cmd/migrate/).

Quick Start: Choose Your Project Type

Project Type Use When Key Directories
CLI Tool Building a command-line application cmd/{name}/, internal/, optional pkg/
Library Creating reusable code for others pkg/{name}/, internal/ for private code
Service HTTP API, microservice, or web app cmd/{service}/, internal/, api/, web/
Monorepo Multiple related packages/modules go.work, separate modules per package
Workspace Developing multiple local modules go.work, replace directives

Module Naming Conventions

Module Name (go.mod)

Your module path in go.mod should:

  • MUST match your repository URL: github.com/username/project-name
  • Use lowercase only: github.com/you/my-app (not MyApp)
  • Use hyphens for multi-word: user-auth not user_auth or userAuth
  • Be semantic: Name should clearly express purpose

Examples:

// ✅ Good
module github.com/jdoe/payment-processor
module github.com/company/cli-tool

// ❌ Bad
module myproject
module github.com/jdoe/MyProject
module utils

Package Naming

Packages MUST be lowercase, singular, and match their directory name. → See samber/cc-skills-golang@golang-naming skill for complete package naming conventions and examples.

Directory Layout

All main packages must reside in cmd/ with minimal logic — parse flags, wire dependencies, call Run(). Business logic belongs in internal/ or pkg/. Use internal/ for non-exported packages, pkg/ only when code is useful to external consumers.

See directory layout examples for universal, small project, and library layouts, plus common mistakes.

Essential Configuration Files

Every Go project should include at the root:

  • Makefile — build automation. See Makefile template
  • .gitignore — git ignore patterns. See .gitignore template
  • .golangci.yml — linter config. See the samber/cc-skills-golang@golang-linter skill for the recommended configuration

For application configuration with Cobra + Viper, see config reference.

Tests, Benchmarks, and Examples

Co-locate _test.go files with the code they test. Use testdata/ for fixtures. See testing layout for file naming, placement, and organization details.

Go Workspaces

Use go.work when developing multiple related modules in a monorepo. See workspaces for setup, structure, and commands.

Initialization Checklist

When starting a new Go project:

  • Ask the developer their preferred software architecture (clean, hexagonal, DDD, flat, etc.)
  • Ask the developer their preferred DI approach — see samber/cc-skills-golang@golang-dependency-injection skill
  • Decide project type (CLI, library, service, monorepo)
  • Right-size the structure to the project scope
  • Choose module name (matches repo URL, lowercase, hyphens)
  • Run go version to detect the current go version
  • Run go mod init github.com/user/project-name
  • Create cmd/{name}/main.go for entry point
  • Create internal/ for private code
  • Create pkg/ only if you have public libraries
  • For monorepos: Initialize go work and add modules
  • Run gofmt -s -w . to ensure formatting
  • Add .gitignore with /vendor/ and binary patterns

Related Skills

→ See samber/cc-skills-golang@golang-cli skill for CLI tool structure and Cobra/Viper patterns. → See samber/cc-skills-golang@golang-dependency-injection skill for DI approach comparison and wiring. → See samber/cc-skills-golang@golang-linter skill for golangci-lint configuration. → See samber/cc-skills-golang@golang-continuous-integration skill for CI/CD pipeline setup. → See samber/cc-skills-golang@golang-design-patterns skill for architectural patterns.

安全使用建议
This skill is an instruction-only guide for structuring Go projects and appears internally consistent and low-risk. Before invoking it, understand that the agent may suggest or run repository-oriented commands (go mod init, gofmt, git operations, linter runs). If you allow the agent to execute commands, review proposed commands before permitting any write or git operations. Also follow the skill's own guidance: do not commit secrets to config files — keep sensitive values in environment variables or secret management. If you want additional assurance, test the skill in a disposable repository or sandbox first.
功能分析
Type: OpenClaw Skill Name: golang-project-layout Version: 1.1.3 The skill bundle provides standard architectural guidance and directory layout templates for Golang projects. It promotes security best practices, such as explicitly advising against committing sensitive credentials to configuration files (references/config.md) and recommending the use of environment variables. The instructions in SKILL.md and the evaluation criteria in evals/evals.json are consistent with the stated purpose of assisting a developer with project organization and do not contain any malicious commands or exfiltration logic.
能力评估
Purpose & Capability
Name and description match the contents: the skill is a guide for Go project layouts and only requires the 'go' binary and common dev tools (gofmt, git, golangci-lint). There are no environment variables, credentials, or unrelated binaries requested.
Instruction Scope
SKILL.md instructs asking the developer about architecture/DI, running benign commands (e.g., `go version`, `go mod init`, `gofmt`), and creating standard project files. It does not instruct reading unrelated system files, exfiltrating secrets, or calling external endpoints beyond normal repository naming conventions.
Install Mechanism
No install spec and no code to execute or download. The skill is instruction-only, so nothing will be written to disk by an installer step.
Credentials
The skill requests no environment variables or credentials (primary credential: none). The guidance explicitly recommends sensitive values come from env vars or secret managers rather than committed configs.
Persistence & Privilege
always is false and the skill does not request persistent presence or modify other skills or system-wide settings. It allows running common dev tools (bash with go/golangci-lint/git) which is reasonable for a project scaffolding/organization skill.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install golang-project-layout
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /golang-project-layout 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.1.3
golang-project-layout v1.1.3 - Added user prompt capability by enabling AskUserQuestion tool in metadata for improved interaction. - Updated internal references, replacing "->" with "→" for clarity and consistency. - Bumped version metadata to 1.1.3.
v1.1.1
- Bumped version to 1.1.1. - Added an evaluation config file: evals/evals.json. - Updated metadata in SKILL.md to reflect new version. - No changes to project layout guidance or core usage instructions.
v0.1.0
- Initial release providing a concise, opinionated guide for setting up Golang project layouts and workspaces. - Includes decision trees for architecture and dependency injection, with recommended follow-up skills for deeper dives. - Covers naming conventions, recommended directory structures, and essential config files for Go projects of all sizes. - Features checklists and quick-start tables to help right-size project structure for CLI tools, libraries, services, and monorepos. - Links to related skills for CLI patterns, dependency injection, linters, CI/CD, and design patterns.
元数据
Slug golang-project-layout
版本 1.1.3
许可证 MIT-0
累计安装 0
当前安装数 0
历史版本数 3
常见问题

Golang Project Layout 是什么?

Provides a guide for setting up Golang project layouts and workspaces. Use this whenever starting a new Go project, organizing an existing codebase, setting... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 179 次。

如何安装 Golang Project Layout?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install golang-project-layout」即可一键安装,无需额外配置。

Golang Project Layout 是免费的吗?

是的,Golang Project Layout 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。

Golang Project Layout 支持哪些平台?

Golang Project Layout 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 Golang Project Layout?

由 Samuel Berthe(@samber)开发并维护,当前版本 v1.1.3。

💬 留言讨论