「笔记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 实现用户的认证,确保只有登录用户可以进行增删操作。
- 点赞和回复功能:在话题或评论中增加点赞数、回复功能,以增强社区互动。
- 分页和排序:对于获取话题和评论的接口,加入分页和排序功能,提升用户体验。