一个基于 Go + Gin + GORM + MySQL + JWT 的博客系统,包含用户认证、文章管理、评论系统等功能。
这是一个完整的博客系统后端项目,提供以下功能:
- ✅ 用户注册、登录、JWT认证
- ✅ 文章的增删改查
- ✅ 评论系统
- ✅ 用户权限管理
- ✅ RESTful API 设计
- ✅ 数据库自动迁移
- 语言: Go 1.25.4
- Web框架: Gin v1.11.0
- ORM: GORM v1.31.1
- 数据库: MySQL 8.0+
- 认证: JWT (golang-jwt/jwt/v5)
- 其他依赖:
- MySQL驱动: gorm.io/driver/mysql
- 参数验证: go-playground/validator/v10
go-job/
├── main.go # 程序入口
├── go.mod # Go模块依赖
├── go.sum # 依赖版本锁定
├── README.md # 项目说明文档
├── blog/ # 博客模块
│ ├── db.go # 数据库连接和初始化
│ ├── jwt_utils.go # JWT工具函数
│ ├── middleware.go # 中间件(认证等)
│ ├── route.go # 路由定义
│ └── Model/ # 数据模型
│ ├── users.go # 用户模型
│ ├── posts.go # 文章模型
│ └── comments.go # 评论模型
├── task-1/ # 任务1相关代码
├── task-2/ # 任务2相关代码
├── task-3/ # 任务3相关代码
└── utils/ # 工具函数
└── fibonacci.go # 斐波那契数列实现
- Go: 1.25.4 或更高版本
- MySQL: 8.0 或更高版本
- 操作系统: Windows 10/11, macOS, Linux
- IDE: VS Code, GoLand, 或其他支持Go的编辑器
- API测试: Postman, curl, 或其他HTTP客户端
- 数据库管理: MySQL Workbench, phpMyAdmin, 或其他MySQL客户端
git clone <your-repository-url>
cd go-job访问 Go官网 下载并安装 Go 1.25.4+
验证安装:
go version- Windows: 下载 MySQL Installer
- macOS: 使用 Homebrew:
brew install mysql - Linux:
sudo apt-get install mysql-server(Ubuntu/Debian)
go mod download
go mod tidy在 blog/db.go 文件中修改数据库连接信息:
// 当前配置
mysql.Open("root:123456@(localhost:3306)/gorm?charset=utf8mb4&parseTime=True&loc=Local")
// 修改为你的配置
mysql.Open("用户名:密码@(主机:端口)/数据库名?charset=utf8mb4&parseTime=True&loc=Local")CREATE DATABASE gorm CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;在 blog/jwt_utils.go 文件中可以修改JWT配置:
var (
JWTSecret = []byte("jss@13&^()") // 修改为你的密钥
TokenExpireDuration = time.Hour * 24 // Token过期时间
)# Windows (以管理员身份运行)
net start mysql
# macOS/Linux
sudo systemctl start mysql
# 或
sudo service mysql start# 方式1: 直接运行
go run main.go
# 方式2: 编译后运行
go build -o app main.go
./app # Linux/macOS
app.exe # Windows看到以下输出表示启动成功:
Database migrated successfully
[GIN-debug] Listening and serving HTTP on :8080
访问 http://localhost:8080 验证服务是否正常运行。
| 方法 | 路径 | 描述 | 认证 |
|---|---|---|---|
| POST | /auth/register |
用户注册 | 否 |
| POST | /auth/login |
用户登录 | 否 |
| POST | /auth/refresh |
刷新Token | 是 |
| 方法 | 路径 | 描述 | 认证 |
|---|---|---|---|
| GET | /api/profile |
获取用户信息 | 是 |
| POST | /api/users |
创建用户 | 是 |
| 方法 | 路径 | 描述 | 认证 |
|---|---|---|---|
| POST | /api/posts |
创建文章 | 是 |
| GET | /api/posts/:id |
获取文章详情 | 是 |
| GET | /public/posts |
获取公开文章列表 | 否 |
| 方法 | 路径 | 描述 | 认证 |
|---|---|---|---|
| POST | /api/comments |
创建评论 | 是 |
curl -X POST http://localhost:8080/auth/register \
-H "Content-Type: application/json" \
-d '{
"username": "testuser",
"email": "test@example.com",
"password": "123456"
}'curl -X POST http://localhost:8080/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "test@example.com",
"password": "123456"
}'curl -X GET http://localhost:8080/api/profile \
-H "Authorization: Bearer YOUR_JWT_TOKEN"- 在
blog/Model/中定义数据模型 - 在
blog/route.go中添加处理函数 - 在
RegisterRoutes函数中注册路由
在 blog/middleware.go 中定义中间件,然后在路由中使用:
// 定义中间件
func CustomMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
// 中间件逻辑
c.Next()
}
}
// 使用中间件
r.Use(CustomMiddleware())项目启动时会自动执行数据库迁移。如果需要手动迁移:
db.AutoMigrate(&model.YourNewModel{})问题: Error 1045: Access denied for user 'root'@'localhost'
解决方案:
- 检查MySQL用户名和密码是否正确
- 确保MySQL服务正在运行
- 检查数据库是否存在
问题: bind: address already in use
解决方案:
# 查找占用8080端口的进程
netstat -ano | findstr :8080 # Windows
lsof -i :8080 # macOS/Linux
# 杀死进程或修改端口问题: module not found 或依赖下载失败
解决方案:
# 清理模块缓存
go clean -modcache
# 重新下载依赖
go mod download
go mod tidy
# 如果在中国,设置代理
go env -w GOPROXY=https://goproxy.cn,direct问题: Invalid token 错误
解决方案:
- 检查Token是否过期
- 确保请求头格式正确:
Authorization: Bearer <token> - 检查JWT密钥是否一致
问题: Table doesn't exist 错误
解决方案:
- 确保数据库迁移成功执行
- 检查数据库连接配置
- 手动运行迁移或重启应用
如果遇到问题,可以通过以下方式获取帮助:
- 查看项目日志输出
- 检查数据库连接状态
- 验证API请求格式
- 查看Go和MySQL版本兼容性
本项目仅用于学习和开发目的。
最后更新: 2025年12月8日 Go版本: 1.25.4 项目版本: 1.0.0