Miniblog 是一个基于 Go 语言开发的、遵循 Clean Architecture (整洁架构) 的企业级博客后端项目。
本项目不仅实现了用户管理和博客管理的核心业务功能,更重要的是展示了 Go 语言在现代后端开发中的最佳实践。它涵盖了从 API 设计、依赖注入、认证鉴权 到 数据库 ORM、结构化日志、优雅关停 等全链路的技术细节,是展示后端工程能力的绝佳示例。
项目灵感来源于孔令飞老师的 Golang 实战课程,并在此基础上进行了工程化落地。
本项目采用了业界主流的高性能组件,展示了对现代 Go 生态的熟练运用:
| 类别 | 组件/技术 | 说明 |
|---|---|---|
| 核心框架 | Gin | 高性能 Web 框架,处理 HTTP 请求 |
| RPC 通信 | gRPC + Protobuf | 高效的微服务间通信与接口定义 |
| 数据库/ORM | GORM | 强大的 ORM 库,支持 MySQL 等多种数据库 |
| 认证与授权 | JWT + Casbin | 基于 Token 的认证与基于 RBAC/ABAC 的精细化授权 |
| 依赖注入 | Wire | Google 开源的编译时依赖注入工具,降低代码耦合 |
| 配置管理 | Viper | 支持多种格式(YAML/JSON)的配置热加载 |
| 命令行工具 | Cobra | 强大的 CLI 应用程序库 |
| 日志监控 | Zap | 高性能结构化日志库 |
| API 文档 | Swagger/OpenAPI 3.0 | 自动生成 RESTful API 文档 |
| 工程化 | Makefile + GolangCI-Lint | 自动化构建与代码质量静态检查 |
- 注册/登录:基于 JWT 的安全认证机制。
- 个人信息管理:支持查询、更新用户详情及密码修改。
- 权限控制:基于 Casbin 实现灵活的 API 访问控制。
- CRUD 操作:完整的博客文章创建、读取、更新、删除流程。
- 列表查询:支持分页、排序等高级查询功能。
- 整洁架构 (Clean Architecture):
Controller层:处理 HTTP/gRPC 请求参数绑定与校验。Biz层:核心业务逻辑,不依赖具体实现。Store层:数据持久化,解耦数据库实现。
- 标准化目录结构:遵循
golang-standards/project-layout规范。 - 统一错误处理:自定义错误码机制,通过中间件统一拦截处理。
- 可观测性:集成了 Request ID 链路追踪、Pprof 性能分析。
- Go 1.22+
- MariaDB (或其他兼容数据库)
- Make 工具
-
克隆项目
git clone https://github.com/TobyIcetea/miniblog.git cd miniblog -
初始化工作区
go work init . go work use .
-
配置数据库
- 创建数据库
miniblog - 导入 SQL 文件:
source configs/miniblog.sql - 修改配置文件
configs/miniblog.yaml中的数据库连接信息(如有)。
- 创建数据库
-
编译与运行
# 编译项目 make build # 启动 API 服务 ./_output/mb-apiserver
-
验证服务
curl http://127.0.0.1:5555/healthz # 输出: {"timestamp":"2026-01-06 ..."} # 项目支持 https,需要在配置文件中开启 tls 选项,同时配置证书路径
├── cmd/ # 主程序入口
├── configs/ # 配置文件模板与 SQL 脚本
├── internal/ # 私有应用代码 (业务逻辑核心)
│ ├── apiserver/ # API 服务具体实现
│ ├── pkg/ # 内部共享包
├── pkg/ # 可被外部项目引用的库代码
├── api/ # OpenAPI/Swagger 定义
└── Makefile # 构建脚本