# x-HanJin
**Repository Path**: cross-lang/x-HanJin
## Basic Information
- **Project Name**: x-HanJin
- **Description**: 一个基于 Gin 框架深度封装的生产级 Go Web 项目框架
- **Primary Language**: Go
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-07-24
- **Last Updated**: 2026-05-12
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# x-HanJin (汉津)
> 一个基于 Gin 框架深度封装的生产级 Go Web 项目框架
## 项目简介
x-HanJin(汉津)是一个基于 Gin 框架深度封装的生产级 Go Web 项目框架,采用标准的 Go 项目目录布局(cmd / pkg / internal),预集成数据库、消息队列、缓存、日志、中间件、加密工具等常用组件,开发者可在此基础上快速构建业务服务。
**核心价值**:
- 开箱即用:预置生产级基础组件,开箱即用
- 标准规范:遵循 Go 项目标准布局和最佳实践
- 高度模块化:清晰的分层架构,易于扩展和维护
- 企业级特性:完善的日志、监控、加密、容器化支持
**适用场景**:
- 中小型企业级 Web 后端服务
- 微服务架构中的独立服务模块
- 需要快速迭代的项目开发
- 需要集成多种数据源和消息队列的复杂业务系统
## 核心特征
### 生产级特性
- **RESTful API**:基于 Gin 的 CRUD 接口,支持路由分组和 API 版本管理
- **Swagger 文档**:在线交互式 API 文档,支持 JSON/YAML 离线导出
- **日志管理**:基于 zap 的结构化 JSON 日志,按日期轮转,支持 trace_id 追踪和远程推送
- **配置管理**:基于 viper,支持 YAML/JSON/ENV 多格式配置
- **异常恢复**:Panic 捕获中间件,记录堆栈信息,确保服务稳定运行
- **签名验证**:HMAC-SHA256 请求签名中间件,防时序攻击,保障接口安全
### 数据存储
- **MySQL**:基于 GORM 的 ORM 操作,支持自动迁移
- **Elasticsearch**:索引创建、文档 CRUD、批量 upsert 操作
- **Redis**:缓存和会话存储(占位)
- **PostgreSQL**:关系型数据库支持(占位)
- **TDengine**:时序数据库支持(占位)
### 消息与事件
- **RabbitMQ**:生产者/消费者模式,支持队列声明和消息发布/订阅
- **Kafka**:高吞吐量消息系统(占位)
- **RocketMQ**:分布式消息系统(占位)
- **事件处理**:基于签名验证和解密的事件/消息分发框架
- **定时任务**:基于 robfig/cron,支持秒级 cron 表达式和周期任务
### 安全与加密
- **AES 加密**:支持 CBC/ECB/GCM 多种模式
- **RSA 加密**:非对称加密支持
- **国密算法**:SM2/SM3/SM4 国密算法完整支持
### 开发与部署
- **本地开发**:支持热重载(Air)和调试模式
- **容器化部署**:Docker 多阶段构建,支持 Docker Compose 与 Kubernetes 编排
- **负载均衡**:Nginx / HAProxy 反向代理和负载均衡配置
## 项目结构
```
x-HanJin/
├── cmd/ # 程序入口
│ └── server/
│ └── main.go # 主入口,初始化配置/日志/路由,启动 HTTP 服务
├── internal/ # 私有应用代码(不可被外部项目导入)
│ ├── config/ # 配置加载与管理(viper)
│ ├── constants/ # 应用级常量定义
│ ├── controllers/ # HTTP 控制器层(参数绑定、响应格式化)
│ ├── databases/ # 数据库初始化
│ │ ├── es/ # Elasticsearch 客户端封装
│ │ ├── kaiwudb/ # KaiwuDB(占位)
│ │ ├── mysql/ # MySQL/GORM 连接管理
│ │ ├── postgresql/ # PostgreSQL(占位)
│ │ ├── redis/ # Redis(占位)
│ │ └── tdengine/ # TDengine(占位)
│ ├── event/ # 事件处理框架(验签、解密、分发)
│ ├── message/ # 消息处理框架(多终端推送)
│ ├── message_queues/ # 消息队列集成
│ │ ├── kafka/ # Kafka(占位)
│ │ ├── rabbitmq/ # RabbitMQ 生产者/消费者
│ │ │ ├── consumer/
│ │ │ └── producer/
│ │ └── rocketmq/ # RocketMQ(占位)
│ ├── middlewares/ # HTTP 中间件
│ │ ├── exception_middleware.go # 异常恢复(panic 捕获)
│ │ └── signature_middleware.go # HMAC-SHA256 签名验证
│ ├── models/ # 数据模型
│ │ └── user/
│ │ └── request/ # 请求 DTO
│ ├── routes/ # 路由注册
│ ├── services/ # 业务逻辑层
│ └── tasks/ # 定时任务调度
├── pkg/ # 可复用的公共包(可被外部项目导入)
│ ├── log/ # zap 日志模块(JSON输出、轮转、远程推送)
│ └── utils/ # 工具函数集
│ ├── aes_util.go # AES 加密/解密(CBC/ECB/GCM)
│ ├── coding_util.go # Base64/Hex 编解码
│ ├── ctx_util.go # 上下文值读写
│ ├── file_util.go # 文件操作
│ ├── gen_util.go # 随机生成(盐值、密码、IV)
│ ├── http_util.go # HTTP 客户端(GET/POST/上传)
│ ├── int_util.go # 整数三元表达式
│ ├── json_util.go # JSON 序列化/反序列化
│ ├── rsa_util.go # RSA 加密/解密
│ ├── sm2_util.go # SM2 国密非对称加密
│ ├── sm3_util.go # SM3 国密哈希
│ ├── sm4_util.go # SM4 国密对称加密
│ ├── str_util.go # 字符串工具
│ └── time_util.go # 时间格式化/计算
├── scripts/ # 构建/部署脚本
│ └── run.sh # Docker 启动脚本
├── configs/ # 配置文件
│ ├── config.yaml # 应用配置(端口/数据库/MQ/日志)
│ ├── nginx.conf # Nginx 反向代理配置
│ └── haproxy.conf # HAProxy 负载均衡配置
├── deploy/ # 部署编排
│ ├── docker-compose/ # Docker Compose
│ └── kubernetes/ # Kubernetes manifests
├── docs/ # Swagger 自动生成文档
├── statics/ # 静态资源
├── .air.toml # Air 热重载配置
├── .gitignore # Git 忽略规则
├── Dockerfile # 多阶段 Docker 构建
├── LICENSE # MIT 许可证
├── README.md # 中文文档
├── README.en.md # 英文文档
├── go.mod # Go 模块定义
└── go.sum # 依赖校验
```
## 系统架构
### 系统分层架构图
```mermaid
graph TD
client["客户端 (Client)"]
proxy["Nginx / HAProxy
反向代理 & 负载均衡"]
subgraph gin["Gin HTTP Server"]
subgraph mw["Middleware Pipeline"]
recovery["RecoveryMiddleware"]
signature["SignatureMiddleware"]
logger_mw["LoggerMiddleware"]
end
routes["Routes /api/v1/*"]
controllers["Controllers
参数绑定 & 响应格式化"]
services["Services
业务逻辑层"]
db["Databases
MySQL / ES / Redis / ..."]
mq["Message Queues
RabbitMQ / Kafka / RocketMQ"]
tasks["Tasks
Cron 调度"]
pkg["pkg 公共包
log 日志 · utils 加密/HTTP/时间/字符串"]
end
client -->|HTTP| proxy
proxy --> mw
mw --> routes --> controllers --> services
services --> db
services --> mq
services --> tasks
```
### 核心功能业务流程图
```mermaid
flowchart TD
client["客户端请求"] --> nginx["Nginx 反向代理\n(80 → 8080)"]
nginx --> gin["Gin Engine"]
gin --> recovery["RecoveryMiddleware\n捕获 panic,记录堆栈"]
recovery --> signature["SignatureMiddleware\nHMAC-SHA256 签名验证\n(/swagger 路径跳过)"]
signature --> router["Router 路由分发\n(/api/v1/*)"]
router --> controller["Controller 控制器\n参数绑定 & 参数校验"]
controller --> service["Service 业务逻辑"]
service --> mysql["MySQL (GORM)\n数据持久化"]
service --> rabbitmq["RabbitMQ Producer\n消息通知"]
service --> es["Elasticsearch\n搜索索引"]
service --> task["Task Scheduler\n定时任务"]
service --> response["统一响应格式"]
```
### 模块依赖关系图
```mermaid
flowchart TD
cmd["cmd/server"]
config["internal/config\n配置加载 (viper)"]
databases["internal/databases\n数据库初始化"]
mysql["mysql"]
es["es"]
redis_pg["redis / postgresql / kaiwudb / tdengine\n(占位)"]
middlewares["internal/middlewares\nHTTP 中间件"]
exception["exception"]
signature["signature"]
routes["internal/routes\n路由注册"]
controllers["controllers"]
services["services"]
event["internal/event\n事件处理"]
message["internal/message\n消息处理"]
message_queues["internal/message_queues\n消息队列"]
rabbitmq["rabbitmq"]
tasks["internal/tasks\n定时任务"]
pkg_log["pkg/log"]
pkg_utils["pkg/utils"]
cmd --> config
cmd --> databases
cmd --> middlewares
cmd --> routes
cmd --> event
cmd --> message
cmd --> message_queues
cmd --> tasks
databases --> mysql
databases --> es
databases --> redis_pg
mysql --> config
mysql --> pkg_log
es --> pkg_log
middlewares --> exception
middlewares --> signature
exception --> pkg_log
signature --> config
routes --> controllers
controllers --> services
services --> mysql
services --> rabbitmq
services --> pkg_log
event --> pkg_utils
event --> pkg_log
message --> pkg_log
message_queues --> rabbitmq
rabbitmq --> config
rabbitmq --> pkg_log
tasks --> pkg_log
pkg_log --> config
pkg_utils --> pkg_log
```
## 快速开始
### 环境要求
#### Windows
- Go 1.24+(必需;`go.mod` 已固定为 `go 1.24.0`)
- Git(用于克隆项目)
- 配置文件:`configs/config.yaml`(需要根据实际情况填写 MySQL / Redis / ES / RabbitMQ 的地址与账号密码)
- 可选依赖(按功能启用;不使用对应能力即可不拉起服务):
- MySQL 5.7+(数据持久化)
- Redis 6.0+(缓存/会话)
- Elasticsearch 8.x(搜索索引)
- RabbitMQ 3.8+(异步消息队列)
- (可选)Swagger 文档生成:安装 `swag`(`go install github.com/swaggo/swag/cmd/swag@latest`)
- (可选)热重载开发:安装 `air`(`go install github.com/cosmtrek/air@latest`)
#### Linux
- Go 1.24+(必需;`go.mod` 已固定为 `go 1.24.0`)
- Git(用于克隆项目)
- 配置文件:`configs/config.yaml`(需要根据实际情况填写 MySQL / Redis / ES / RabbitMQ 的地址与账号密码)
- 可选依赖(按功能启用;不使用对应能力即可不拉起服务):
- MySQL 5.7+(数据持久化)
- Redis 6.0+(缓存/会话)
- Elasticsearch 8.x(搜索索引)
- RabbitMQ 3.8+(异步消息队列)
- (可选)Swagger 文档生成:安装 `swag`(`go install github.com/swaggo/swag/cmd/swag@latest`)
- (可选)热重载开发:安装 `air`(`go install github.com/cosmtrek/air@latest`)
### 项目克隆
```bash
git clone https://gitee.com/cross-lang/x-HanJin.git
cd x-HanJin
```
### 依赖安装
```bash
go mod tidy
```
### 配置文件
配置文件路径:`configs/config.yaml`
```yaml
# Web 服务配置
Web:
host: localhost # 服务监听地址
port: 8080 # 服务监听端口
# MySQL 数据库配置
MySQL:
host: localhost # 数据库地址
port: 3306 # 数据库端口
user: root # 用户名
password: your_password # 密码(请修改为实际值)
default_dbname: hanjin # 默认数据库名
# Redis 缓存配置
Redis:
host: localhost # Redis 地址
port: 6379 # Redis 端口
default_db: 0 # 默认数据库编号
# Elasticsearch 配置
ES:
address: localhost # ES 地址
user: elastic # 用户名
password: your_password # 密码(请修改为实际值)
# RabbitMQ 消息队列配置
RabbitMQ:
host: localhost # RabbitMQ 地址
port: 5672 # RabbitMQ 端口
user: guest # 用户名
password: guest # 密码
default_queue_name: x-hanjin-queue # 默认队列名
# 应用配置
App:
app_id: x-HanJin # 应用标识(用于签名验证)
app_key: your_app_key # 应用密钥(请修改为实际值)
# 日志配置
Logger:
LogDir: "./log" # 日志目录
Level: "info" # 日志级别:debug / info / warn / error
EnableRemote: false # 是否启用远程日志推送
RemoteURL: "" # 远程日志服务地址
```
| 配置项 | 说明 |
|--------|------|
| `Web.host` / `Web.port` | Web 服务监听地址和端口 |
| `MySQL.*` | MySQL 连接信息(host/port/user/password/dbname) |
| `Redis.*` | Redis 连接信息(host/port/db) |
| `ES.*` | Elasticsearch 连接信息(address/user/password) |
| `RabbitMQ.*` | RabbitMQ 连接信息(host/port/user/password/queue) |
| `App.app_id` / `App.app_key` | 应用标识和 HMAC 签名密钥 |
| `Logger.*` | 日志配置(目录/级别/远程推送) |
### 服务启动
#### 方式一:本地开发模式启动(支持热重载、调试模式)
```bash
# 1. 修改配置(将密码等敏感值替换为实际值)
# 编辑 configs/config.yaml
# 2. 安装 air 热重载工具(如果尚未安装)
go install github.com/air-verse/air@latest
# 3. 使用 air 启动服务(支持热重载)
air
# 4. 或使用调试模式启动
# Windows
set GIN_MODE=debug
go run ./cmd/server/
# Linux / macOS
export GIN_MODE=debug
go run ./cmd/server/
# 5. 编译后启动
go build -o server ./cmd/server/
./server
```
服务启动后访问:
- API 服务:`http://localhost:8080`
- Swagger 文档:`http://localhost:8080/swagger/index.html`
#### 方式二:Docker 容器化部署
```bash
# 单容器启动
docker build -t x-hanjin .
docker run -p 8080:8080 --name x-hanjin x-hanjin
# Docker Compose(含 MySQL + Redis + RabbitMQ)
cd deploy/docker-compose
# 基础服务(不包含 Elasticsearch)
docker-compose up -d
# 完整服务(包含 Elasticsearch)
docker-compose --profile full up -d
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f x-hanjin
# 停止服务
docker-compose down
# 停止并删除数据卷
docker-compose down -v
# Kubernetes
kubectl apply -f deploy/kubernetes/test-gin.yaml
```
### 常用命令
```bash
# 编译
go build -o server ./cmd/server/
# 运行
go run ./cmd/server/
# 热重载开发
air
# 格式化代码
go fmt ./...
# 代码静态检查
go vet ./...
# 运行测试
go test ./...
# 安装依赖
go mod tidy
# 生成 Swagger 文档
swag init -g cmd/server/main.go -o docs/
# Docker 构建
docker build -t x-hanjin .
# Docker Compose 启动
docker-compose -f deploy/docker-compose/docker-compose.yaml up -d
```
## 技术栈
### Web 框架
- [Gin](https://github.com/gin-gonic/gin) - 高性能 HTTP 框架
### 数据存储
- [GORM](https://gorm.io) - Go 语言 ORM 库
- MySQL - 主数据存储
- Elasticsearch - 搜索引擎
- Redis - 缓存和会话存储
- PostgreSQL - 关系型数据库(占位)
### 消息队列
- RabbitMQ - 异步消息通信
- Kafka - 高吞吐量消息系统(占位)
- RocketMQ - 分布式消息系统(占位)
### 工具库
- [Viper](https://github.com/spf13/viper) - 配置管理,支持 YAML/JSON/ENV 多格式
- [Zap](https://github.com/uber-go/zap) + [Lumberjack](https://github.com/natefinch/lumberjack) - 结构化 JSON 日志 + 文件轮转
- [robfig/cron](https://github.com/robfig/cron) - 定时任务,秒级精度
- [Swaggo](https://github.com/swaggo/swag) - Swagger 自动生成
### 加密安全
- AES / RSA - 通用加密算法
- [SM2-SM4](https://github.com/tjfoc/gmsm) - 国密算法
### 部署工具
- Docker - 容器化
- Docker Compose - 多容器编排
- Kubernetes - 容器编排
- Nginx / HAProxy - 反向代理和负载均衡
## API 文档
项目集成了 Swagger 自动生成 API 文档,支持在线交互和离线导出。
- **Swagger UI 交互式文档**:http://localhost:8080/swagger/index.html
- **ReDoc 只读文档**:http://localhost:8080/swagger/doc.html
- **OpenAPI JSON 文档**:http://localhost:8080/swagger/doc.json
生成文档命令:
```bash
swag init -g cmd/server/main.go -o docs/
```
## 存储配置
### 本地存储
本地存储配置位于 `configs/config.yaml`,主要包括:
- MySQL 数据库连接配置
- Redis 缓存配置
- Elasticsearch 搜索引擎配置
### 对象存储
对象存储功能(如阿里云 OSS、AWS S3 等)目前为预留模块,可根据业务需求进行扩展集成。
## 许可证
本项目采用 [MIT 许可证](LICENSE)。
## 参考资料
- [Gin 框架文档](https://gin-gonic.com/docs/)
- [GORM 文档](https://gorm.io/docs/)
- [Viper 配置管理](https://github.com/spf13/viper)
- [Zap 日志库](https://pkg.go.dev/go.uber.org/zap)
- [Go 项目标准布局](https://github.com/golang-standards/project-layout)
- [Swaggo Swagger 生成](https://github.com/swaggo/swag)
- [Air 热重载工具](https://github.com/cosmtrek/air)
- [Docker 官方文档](https://docs.docker.com/)
- [Docker Compose 文档](https://docs.docker.com/compose/)
- [Kubernetes 文档](https://kubernetes.io/docs/)
## 联系方式
- **作者**:John Young(夜雨诗来)
- **邮箱**:[john.young@foxmail.com](mailto:john.young@foxmail.com)
- **Gitee**:[https://gitee.com/yeyushilai](https://gitee.com/yeyushilai)
- **GitHub**:[https://github.com/yeyushilai](https://github.com/yeyushilai)