课后作业:
- 支持发布帖子
- 本地 ID 生成需要保证不重复、唯一性
- Append 文件,更新索引,注意 Map 的并发安全问题 实现: 回复帖子实现流程:controller和外部进行交互,从post请求得到的数据,调用service.Addpost处理,处理过程中用ID生成器得到postId,然后调用repository.post对post数据进行处理:存储到文件并更新map,更新时加锁。
需要修改的文件
server.go,repository/post.go、repository/db_init.go
修改server.go
添加新的路由,需要传递的参数是topic_id和content
修改db_init.go
就是添加两个锁,用于后续更新map(topix的锁还没用上,后续加上添加topic的功能)
修改post.go
添加AddPost函数,打开文件,对传递过来的post数据序列化,然后写入文件,再更新map索引,此时用lock保证并发安全。
新增文件
controller/add_post.go、service/add_post.go
controller/add_post.go
仿照之前的代码写即可,调用server.AddPost处理
service/add_post.go
仿照之前查找的代码写,post数据格式,处理流,check函数,id生成,这里采用idworker得到,再调用repository里Add函数添加帖子。
用ID生成器,这里进行初始化,在上述Add函数中使用Next()获取ID
实验结果
GET查看tpoicId=2的帖子:
给topicId=2的主题回复一个帖子,回复成功会返回新增帖子的id,再次查看帖子情况,发现已经增加了。
上边是执行post请求,下边再次查看topicid=2的所有帖子
新增的回复对应的topicId不存在时会返回“TopicId does not exist”的结果提醒用户
新增帖子之后post文件如下