go 项目结构
2025/7/21大约 2 分钟约 741 字...
go 项目结构
Go 语言的项目结构遵循一些约定俗成的最佳实践,这些实践有助于代码的组织、维护和复用。以下是一个标准的 Go 项目结构示例及相关说明:
标准项目结构
my-project/
├── cmd/ # 主应用程序入口
│ └── myapp/ # 可执行文件名称
│ └── main.go # 程序入口点
├── internal/ # 内部模块(不可被外部引用)
│ ├── models/ # 数据模型
│ ├── repositories/ # 数据访问层
│ ├── services/ # 业务逻辑层
│ └── utils/ # 工具函数
├── pkg/ # 公共模块(可被外部引用)
│ ├── api/ # API接口定义
│ └── client/ # 客户端库
├── configs/ # 配置文件模板
├── scripts/ # 脚本文件
├── tests/ # 集成测试
├── docs/ # 文档
├── vendor/ # 依赖包(Go 1.14+ 推荐使用go mod代替)
├── go.mod # 模块依赖定义
├── go.sum # 依赖校验文件
└── Makefile # 构建脚本
关键目录说明
1. cmd/
- 应用程序入口
存放项目的主程序入口文件,每个子目录对应一个可执行文件。
// cmd/myapp/main.go
package main
import "my-project/internal/app"
func main() {
app.Run()
}
2. internal/
- 内部模块
Go 语言特有的目录,其中的包不能被外部项目导入,适合存放私有代码。
- models/:定义数据结构和数据库模型。
- repositories/:处理数据访问(如数据库操作)。
- services/:实现业务逻辑。
- controllers/(可选):处理 HTTP 请求(适用于 Web 应用)。
3. pkg/
- 公共模块
存放可被外部引用的公共代码,如工具库、客户端 API 等。
4. configs/
- 配置文件
存放配置模板或示例文件,例如:
# configs/config.yaml
database:
host: localhost
port: 5432
5. scripts/
- 脚本文件
存放构建、部署或测试的脚本,如:
# scripts/setup_db.sh
#!/bin/bash
psql -U postgres -c "CREATE DATABASE mydb;"
6. tests/
- 测试代码
存放集成测试或端到端测试,单元测试通常放在各模块的*_test.go
文件中。
Go Modules 管理依赖
Go 1.11+ 引入了模块系统,使用go.mod
文件管理依赖:
# go.mod
module github.com/username/my-project
go 1.20
require (
github.com/gin-gonic/gin v1.9.0
gorm.io/gorm v1.25.1
)
工具与构建
推荐使用Makefile
简化常用命令:
# Makefile
build:
go build -o bin/myapp cmd/myapp/main.go
test:
go test ./...
run:
go run cmd/myapp/main.go
Web 应用扩展结构
如果是 Web 应用,可增加以下目录:
my-project/
├── web/ # Web相关资源
│ ├── static/ # 静态文件(CSS、JS、图片)
│ └── templates/ # 模板文件
├── api/ # API接口定义
│ ├── v1/ # 版本1
│ │ ├── handlers/ # HTTP处理函数
│ │ └── routes/ # 路由定义
│ └── docs/ # API文档
最佳实践
- 单一职责原则:每个包专注于单一功能。
- 最小化依赖:避免包之间的循环依赖。
- 测试优先:为每个功能编写单元测试。
- 配置外部化:通过环境变量或配置文件管理参数。
- 使用标准库:优先使用 Go 标准库,减少第三方依赖。
通过遵循这些结构和原则,你的 Go 项目将更易于理解、维护和扩展。如果需要针对特定类型的项目(如微服务、CLI 工具)的结构建议,可以进一步说明!