基于 Go + Gin + GORM 构建的博客后端服务。
- 统一 API 规范:所有接口使用 POST 方法,JSON 格式传参
- 清晰的代码结构:按功能模块划分 handlers,代码简洁易读
- 完善的权限控制:三级权限体系(公开/登录/管理员)
- JWT 认证:支持 Token 自动刷新机制
- 性能优化:数据库连接池、预编译语句等
- 参数验证:完善的输入验证和 XSS 防护
My-Blog-Go/
├── config/ # 配置文件
│ ├── config.go # 应用配置
│ └── database.go # 数据库配置
├── handlers/ # 接口处理函数
│ ├── common.go # 公共结构体和辅助函数
│ ├── article.go # 文章相关
│ ├── auth.go # 认证相关
│ ├── user.go # 用户管理
│ ├── comment.go # 评论管理
│ ├── family.go # 表白墙
│ ├── weiyan.go # 微言
│ ├── resource.go # 资源管理
│ ├── resourcepath.go # 资源路径
│ ├── sort.go # 分类标签
│ ├── webinfo.go # 网站信息
│ ├── treehole.go # 树洞
│ ├── words.go # 禁用词
│ ├── ip.go # IP统计
│ └── image.go # 图片上传
├── middleware/ # 中间件
│ ├── auth.go # 认证中间件
│ └── cors.go # CORS 中间件
├── models/ # 数据模型
├── response/ # 响应封装
├── routes/ # 路由配置
├── utils/ # 工具函数
│ ├── jwt.go # JWT 工具
│ ├── password.go # 密码工具
│ ├── email.go # 邮件工具
│ ├── qiniu.go # 七牛云工具
│ └── validator.go # 参数验证工具
├── static/ # 静态文件
├── main.go # 入口文件
├── API.md # API 接口文档
└── README.md
- Go 1.24+
- MySQL 5.7+
go mod download创建 .env 文件:
# 数据库配置
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USER=root
DB_PASSWORD=your_password
DB_NAME=myblog
# JWT 密钥(生产环境务必修改)
JWT_SECRET=your-secret-key
# 邮件配置
EMAIL_FROM=your-email@qq.com
EMAIL_PASSWORD=your-email-password
EMAIL_SMTP_HOST=smtp.qq.com
EMAIL_SMTP_PORT=465
# AI 摘要服务(可选)
SUMMARY_URL=
SUMMARY_AUTH=
# 服务器配置
SERVER_PORT=8000
ENVIRONMENT=development
# 默认值配置(可选)
DEFAULT_SORT_ID=11
DEFAULT_LABEL_ID=23
# 验证配置(可选)
MAX_USERNAME_LENGTH=50
MAX_PASSWORD_LENGTH=128
MIN_PASSWORD_LENGTH=6
MAX_ARTICLE_TITLE_LENGTH=200
MAX_COMMENT_LENGTH=2000
MAX_TREEHOLE_LENGTH=500mysql -u root -p < database/schema.sql普通启动:
go run main.go热重载启动(推荐开发时使用):
# 首次使用需要安装 air
go install github.com/air-verse/air@latest
# 如果提示 command not found,需要添加 Go bin 到 PATH
echo 'export PATH=$PATH:$(go env GOPATH)/bin' >> ~/.zshrc
source ~/.zshrc
# 使用 air 启动(修改代码后自动重新编译并重启)
air服务启动后访问: http://localhost:8000
项目已配置 .air.toml,使用 air 命令启动后:
- ✨ 修改任意
.go文件后自动重新编译 - ✨ 编译成功后自动重启服务器
- ✨ 无需手动 Ctrl+C 再重新运行
| 启动方式 | 修改代码后 |
|---|---|
go run main.go |
手动停止 → 重新运行 |
air |
自动编译 → 自动重启 |
查看 API.md 文件获取完整的接口说明。
- 所有接口统一使用
POST方法 - 请求体使用
JSON格式 - 路径不以斜杠
/结尾
{
"code": 0, // 状态码:0-成功,其他-失败
"msg": "操作成功",
"data": {}, // 响应数据
"error": false,
"success": true
}{
"code": 0,
"msg": "操作成功",
"data": {
"totalCount": 100,
"pageSize": 10,
"totalPage": 10,
"page": 1,
"list": [],
"empty": false
},
"error": false,
"success": true
}在请求头中添加:
Authorization: Token <your-token>
或
Authorization: Bearer <your-token>
| 接口 | 说明 |
|---|---|
| POST /api/user/login | 前台登录 |
| POST /api/user/registration | 用户注册 |
| POST /api/user/updateForForgetPassword | 忘记密码 |
| POST /api/admin/user/login | 后台登录 |
| POST /api/code | 发送验证码 |
| POST /api/article/list | 文章列表 |
| POST /api/article/detail | 文章详情 |
| POST /api/summary | 获取文章摘要 |
| POST /api/webInfo/getSortInfo | 分类信息 |
| POST /api/webInfo/getWebInfo | 网站信息 |
| POST /api/comment/listComment | 评论列表 |
| ... |
| 接口 | 说明 |
|---|---|
| POST /api/user/updateUserInfo | 更新用户信息 |
| POST /api/resource/saveResource | 保存资源 |
| POST /api/resource/updateImage | 上传图片 |
| POST /api/admin/comment/boss/addComment | 添加评论 |
| POST /api/article/articleLike | 文章点赞 |
| ... |
| 接口 | 说明 |
|---|---|
| POST /api/article/list | 文章列表(viewAll=true) |
| POST /api/article/save | 保存文章 |
| POST /api/article/update | 更新文章 |
| POST /api/article/delete | 删除文章 |
| POST /api/user/list | 用户列表(isAdmin=true) |
| POST /api/webInfo/saveOrUpdateSort | 保存或更新分类 |
| ... |
| 用户类型 | 值 | 说明 |
|---|---|---|
| Boss | 0 | 超级管理员 |
| Admin | 1 | 管理员 |
| Normal | 2 | 普通用户 |
| Visitor | 3 | 访客 |
系统内置了完善的参数验证机制:
| 参数类型 | 验证规则 | 默认限制 |
|---|---|---|
| 用户名 | 字母、数字、下划线、中文 | 最大 50 字符 |
| 密码 | 任意字符 | 6-128 字符 |
| 邮箱 | 标准邮箱格式 | - |
| 验证码 | 6 位字母数字 | - |
| 文章标题 | 任意字符 | 最大 200 字符 |
| 评论内容 | 任意字符 | 最大 2000 字符 |
| 树洞留言 | 任意字符 | 最大 500 字符 |
系统会自动进行 XSS 防护,清理危险的 HTML 标签和 JavaScript 代码。
- 生产环境务必修改 JWT_SECRET
- 使用 HTTPS
- 配置防火墙规则
- 定期备份数据库
- 监控异常访问
- 定期更新依赖包
MIT License