「笔记004」Go课程工程实践作业
1. 项目简介
该项目是一个基于 Golang 的社区论坛,允许用户创建话题 (Topic),并对话题进行评论 (Post)。项目要求包含话题的增删改查功能,并提供话题下的评论管理功能。用户需要注册和登录以使用所有功能,并且每个评论需要归属到对应的话题下。
2. 技术栈
- 后端:Golang
- 数据库:MySQL
- 开发框架:Gin(或其它 Golang 框架)
- ORM:GORM
- 依赖管理:Go Modules
3. 数据库设计
根据需求,有以下三张表:user、topic 和 post。
3.1 用户表 user
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | INT | 主键,自增 |
| name | VARCHAR(50) | 用户名 |
| avatar | VARCHAR(255) | 用户头像 URL |
| level | INT | 用户等级 |
| create_time | DATETIME | 创建时间 |
| modify_time | DATETIME | 修改时间 |
3.2 话题表 topic
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | INT | 主键,自增 |
| title | VARCHAR(255) | 话题标题 |
| content | TEXT | 话题内容 |
| create_time | DATETIME | 创建时间 |
| userid | INT | 创建话题的用户 ID |
| digg_count | INT | 点赞数(可选) |
说明:
userid是外键,关联user表的id字段。
3.3 评论表 post
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | INT | 主键,自增 |
| topic_id | INT | 关联的 topic 表 ID |
| content | TEXT | 评论内容 |
| create_time | DATETIME | 创建时间 |
| userid | INT | 评论的用户 ID |
说明:
topic_id和userid是外键,分别关联topic表的id字段和user表的id字段。
4. API 设计
4.1 用户相关接口
4.1.1 用户注册
- URL:
/api/user/register - 方法:POST
- 请求体:
json { "name": "string", "avatar": "string" } - 响应:
json { "id": "int", "message": "User registered successfully." }
4.1.2 用户登录
- URL:
/api/user/login - 方法:POST
- 请求体:
json { "name": "string" } - 响应:
json { "id": "int", "message": "User logged in successfully." }
4.2 话题 (Topic) 相关接口
4.2.1 创建话题
- URL:
/api/topic - 方法:POST
- 请求体:
json { "title": "string", "content": "string", "userid": "int" } - 响应:
json { "id": "int", "message": "Topic created successfully." }
4.2.2 获取所有话题
- URL:
/api/topics - 方法:GET
- 响应:
json [ { "id": "int", "title": "string", "content": "string", "create_time": "datetime", "userid": "int", "digg_count": "int" }, ... ]
4.2.3 删除话题
- URL:
/api/topic/{id} - 方法:DELETE
- 响应:
json { "message": "Topic deleted successfully." }
4.3 评论 (Post) 相关接口
4.3.1 创建评论
- URL:
/api/post - 方法:POST
- 请求体:
json { "topic_id": "int", "content": "string", "userid": "int" } - 响应:
json { "id": "int", "message": "Post created successfully." }
4.3.2 获取指定话题的所有评论
- URL:
/api/topic/{topic_id}/posts - 方法:GET
- 响应:
json [ { "id": "int", "content": "string", "create_time": "datetime", "userid": "int" }, ... ]
4.3.3 删除评论
- URL:
/api/post/{id} - 方法:DELETE
- 响应:
json { "message": "Post deleted successfully." }
5. 开发步骤
初始化项目:
- 创建 Golang 项目目录,使用 Go Modules 管理依赖。
- 安装 Gin、GORM 和 MySQL 驱动等依赖。
设置数据库连接:
- 在
config文件中配置 MySQL 连接参数。 - 使用 GORM 初始化数据库连接。
- 在
定义数据模型:
- 创建
user.go、topic.go和post.go文件,定义对应的模型和表结构。
- 创建
实现逻辑:
- 在每个模型文件中,添加数据访问方法(如
CreateTopic、DeleteTopic、GetTopics等)。 - 在
handler文件夹中,为每个资源(用户、话题、评论)实现业务逻辑。
- 在每个模型文件中,添加数据访问方法(如
设置路由:
- 在主文件中(
main.go),使用 Gin 定义 API 路由,关联控制器。 - 启动服务器,监听请求。
- 在主文件中(
测试:
- 使用 Postman 测试接口,确保各功能正常。
- 编写单元测试和集成测试,覆盖业务逻辑和数据访问层。
6. 可以做出的扩展
- 用户认证和授权:可以使用 JWT 实现用户的认证,确保只有登录用户可以进行增删操作。
- 点赞和回复功能:在话题或评论中增加点赞数、回复功能,以增强社区互动。
- 分页和排序:对于获取话题和评论的接口,加入分页和排序功能,提升用户体验。