149 lines
3.6 KiB
Markdown
149 lines
3.6 KiB
Markdown
# EnGin
|
||
|
||
基于 **entgo + Gin + Cobra** 的 Go 后端项目脚手架,开箱即用。
|
||
|
||
## 技术栈
|
||
|
||
| 组件 | 选型 |
|
||
|------|------|
|
||
| ORM | [entgo.io/ent](https://entgo.io) — 代码生成式 ORM |
|
||
| Web 框架 | [Gin](https://github.com/gin-gonic/gin) |
|
||
| CLI | [Cobra](https://github.com/spf13/cobra) |
|
||
| 配置管理 | [Viper](https://github.com/spf13/viper) + YAML + 热加载 |
|
||
| 日志 | [Zap](https://github.com/uber-go/zap) + Lumberjack 自动轮转 |
|
||
| 数据库 | MySQL / PostgreSQL |
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
EnGin/
|
||
├── cmd/server/ # CLI 入口与子命令
|
||
│ ├── main.go # 程序入口
|
||
│ ├── root.go # 根命令(加载配置、初始化日志)
|
||
│ ├── server.go # server 子命令:启动 Web 服务
|
||
│ ├── migrate.go # migrate 子命令:数据库迁移
|
||
│ ├── user.go # user 子命令:用户操作
|
||
│ └── gen.go # gen 子命令:重新生成 ent 代码
|
||
├── configs/
|
||
│ └── config.yaml # 主配置文件
|
||
├── internal/
|
||
│ ├── conf/ # 配置结构定义与加载
|
||
│ ├── db/ # 数据库客户端初始化 + 连接池
|
||
│ ├── ent/ # ent 生成的 ORM 代码
|
||
│ │ └── schema/ # Schema 定义(在这里定义数据模型)
|
||
│ ├── global/ # 全局变量 (Config, Log)
|
||
│ ├── handler/ # HTTP 路由注册
|
||
│ ├── logger/ # Zap 日志初始化
|
||
│ ├── server/ # Gin 服务启动
|
||
│ └── service/ # 业务逻辑层
|
||
├── Makefile
|
||
├── go.mod
|
||
└── .air.toml # Air 热重载配置
|
||
```
|
||
|
||
## 快速开始
|
||
|
||
### 环境要求
|
||
|
||
- Go >= 1.25
|
||
- MySQL 或 PostgreSQL
|
||
|
||
### 1. 配置数据库
|
||
|
||
编辑 `configs/config.yaml`:
|
||
|
||
```yaml
|
||
database:
|
||
driver: "postgres" # mysql 或 postgres
|
||
host: "127.0.0.1"
|
||
port: 5432
|
||
user: "postgres"
|
||
password: "123456"
|
||
dbname: "test_db"
|
||
```
|
||
|
||
### 2. 安装依赖
|
||
|
||
```bash
|
||
go mod tidy
|
||
```
|
||
|
||
### 3. 运行
|
||
|
||
```bash
|
||
# 启动 Web 服务
|
||
go run cmd/server/*.go server
|
||
|
||
# 或使用 Makefile
|
||
make run
|
||
```
|
||
|
||
## CLI 命令
|
||
|
||
```bash
|
||
# 查看帮助
|
||
go run cmd/server/*.go -h
|
||
|
||
# 启动 HTTP 服务(默认 :8080)
|
||
go run cmd/server/*.go server -c configs/config.yaml
|
||
|
||
# 数据库自动迁移
|
||
go run cmd/server/*.go migrate -c configs/config.yaml
|
||
|
||
# 重新生成 ent 代码
|
||
go run cmd/server/*.go gen
|
||
|
||
# 用户操作
|
||
go run cmd/server/*.go user create # 创建用户
|
||
```
|
||
|
||
## 开发指南
|
||
|
||
### 添加新数据模型
|
||
|
||
1. 在 `internal/ent/schema/` 下创建新的 Schema 文件
|
||
2. 运行代码生成:
|
||
|
||
```bash
|
||
make generate
|
||
# 或 go generate ./internal/ent
|
||
```
|
||
|
||
### 添加新 API
|
||
|
||
1. 在 `internal/service/` 中编写业务逻辑
|
||
2. 在 `internal/handler/router.go` 中注册路由
|
||
|
||
### 配置说明
|
||
|
||
| 配置项 | 说明 |
|
||
|--------|------|
|
||
| `server.port` | 服务端口 |
|
||
| `server.mode` | `debug`(控制台彩色日志)/ `release`(JSON 日志) |
|
||
| `database.driver` | `mysql` 或 `postgres` |
|
||
| `logger.level` | `debug` / `info` / `warn` / `error` |
|
||
| `logger.filename` | 日志输出路径 |
|
||
| `logger.max_size` | 单个日志文件最大大小(MB) |
|
||
| `logger.max_backups` | 保留的旧日志文件数 |
|
||
| `logger.max_age` | 日志保留天数 |
|
||
|
||
### 热重载(可选)
|
||
|
||
项目已配置 [Air](https://github.com/air-verse/air),安装后可直接使用:
|
||
|
||
```bash
|
||
air
|
||
```
|
||
|
||
## Makefile
|
||
|
||
```makefile
|
||
make run # 启动服务
|
||
make generate # 生成 ent 代码
|
||
make build # 编译二进制到 bin/server
|
||
```
|
||
|
||
## License
|
||
|
||
MIT
|