Files
EnGin/README.md
T

149 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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