返回顶部
g

golang-project-layoutGo项目布局

Provides a guide for setting up Golang project layouts and workspaces. Use this whenever starting a new Go project, organizing an existing codebase, setting up a monorepo with multiple packages, creating CLI tools with multiple main packages, or deciding on directory structure. Apply this for any Go project initialization or restructuring work.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.1.3
安全检测
已通过
160
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

golang-project-layout

角色定位: 你是一位 Go 项目架构师。你能根据问题规模合理调整结构——脚本保持扁平,服务仅在确实复杂时才引入分层。

Go 项目布局

架构决策:先询问

在启动新项目时,询问开发者他们偏好的软件架构(整洁架构、六边形架构、DDD、扁平结构等)。切勿对小项目过度结构化——一个 100 行的 CLI 工具不需要抽象层或依赖注入。

→ 参见 samber/cc-skills-golang@golang-design-patterns 技能,获取包含文件树和代码示例的详细架构指南。

依赖注入:再询问

确定架构后,询问开发者他们想要的依赖注入方式:手动构造函数注入、DI 库(samber/do、google/wire、uber-go/dig+fx),或者完全不使用。选择会影响服务如何组装、生命周期(健康检查、优雅关闭)如何管理,以及项目如何结构化。参见 samber/cc-skills-golang@golang-dependency-injection 技能,获取完整对比和决策表。

12-Factor 应用

对于应用程序(服务、API、工作者),遵循 12-Factor App 规范:通过环境变量配置、日志输出到 stdout、无状态进程、优雅关闭、将后端服务视为附加资源、管理任务作为一次性命令(例如 cmd/migrate/)。

快速开始:选择你的项目类型

项目类型适用场景关键目录
CLI 工具构建命令行应用程序cmd/{name}/、internal/、可选的 pkg/
为他人创建可复用代码 | pkg/{name}/、internal/ 用于私有代码 | | 服务 | HTTP API、微服务或 Web 应用 | cmd/{service}/、internal/、api/、web/ | | 单体仓库 | 多个相关包/模块 | go.work、每个包独立模块 | | 工作区 | 开发多个本地模块 | go.work、replace 指令 |

模块命名规范

模块名称(go.mod)

go.mod 中的模块路径应:

  • - 必须匹配仓库 URL:github.com/username/project-name
  • 仅使用小写:github.com/you/my-app(而非 MyApp)
  • 多词使用连字符:user-auth 而非 user_auth 或 userAuth
  • 语义化:名称应清晰表达用途

示例:

go
// ✅ 良好
module github.com/jdoe/payment-processor
module github.com/company/cli-tool

// ❌ 不良
module myproject
module github.com/jdoe/MyProject
module utils

包命名

包必须使用小写、单数形式,并与目录名匹配。→ 参见 samber/cc-skills-golang@golang-naming 技能,获取完整的包命名规范和示例。

目录布局

所有 main 包必须位于 cmd/ 中,且包含最少的逻辑——解析标志、组装依赖、调用 Run()。业务逻辑属于 internal/ 或 pkg/。使用 internal/ 存放非导出包,仅当代码对外部消费者有用时才使用 pkg/。

参见目录布局示例,了解通用、小型项目和库的布局,以及常见错误。

基本配置文件

每个 Go 项目应在根目录包含:

  • - Makefile — 构建自动化。参见 Makefile 模板
  • .gitignore — git 忽略模式。参见 .gitignore 模板
  • .golangci.yml — linter 配置。参见 samber/cc-skills-golang@golang-linter 技能,获取推荐配置

关于使用 Cobra + Viper 的应用配置,参见配置参考

测试、基准测试和示例

test.go 文件与其测试的代码放在一起。使用 testdata/ 存放测试夹具。参见测试布局,了解文件命名、放置和组织细节。

Go 工作区

在单体仓库中开发多个相关模块时,使用 go.work。参见工作区,了解设置、结构和命令。

初始化检查清单

启动新 Go 项目时:

  • - [ ] 询问开发者他们偏好的软件架构(整洁、六边形、DDD、扁平等)
  • [ ] 询问开发者他们偏好的 DI 方式——参见 samber/cc-skills-golang@golang-dependency-injection 技能
  • [ ] 确定项目类型(CLI、库、服务、单体仓库)
  • [ ] 根据项目范围合理调整结构
  • [ ] 选择模块名称(匹配仓库 URL、小写、连字符)
  • [ ] 运行 go version 检测当前 Go 版本
  • [ ] 运行 go mod init github.com/user/project-name
  • [ ] 创建 cmd/{name}/main.go 作为入口点
  • [ ] 创建 internal/ 存放私有代码
  • [ ] 仅当有公共库时创建 pkg/
  • [ ] 对于单体仓库:初始化 go work 并添加模块
  • [ ] 运行 gofmt -s -w . 确保格式化
  • [ ] 添加包含 /vendor/ 和二进制模式的 .gitignore

相关技能

→ 参见 samber/cc-skills-golang@golang-cli 技能,了解 CLI 工具结构和 Cobra/Viper 模式。
→ 参见 samber/cc-skills-golang@golang-dependency-injection 技能,了解 DI 方式对比和组装。
→ 参见 samber/cc-skills-golang@golang-linter 技能,了解 golangci-lint 配置。
→ 参见 samber/cc-skills-golang@golang-continuous-integration 技能,了解 CI/CD 流水线设置。
→ 参见 samber/cc-skills-golang@golang-design-patterns 技能,了解架构模式。

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 golang-project-layout-1776057863 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 golang-project-layout-1776057863 技能

通过命令行安装

skillhub install golang-project-layout-1776057863

下载

⬇ 下载 golang-project-layout v1.1.3(免费)

文件大小: 12.36 KB | 发布时间: 2026-4-14 10:12

v1.1.3 最新 2026-4-14 10:12
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.

Archiver·手机版·闲社网·闲社论坛·智能体自动化市场· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2026 闲社网·AI智能体论坛·AI自动化解决方案·http://xianshe.com

p2p_official_large
返回顶部