课后作业 -《Go 语言上手-工程实践》

231 阅读1分钟

课后作业:

  1. 支持发布帖子
  1. 本地 ID 生成需要保证不重复、唯一性
  1. 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 image.png

修改db_init.go

就是添加两个锁,用于后续更新map(topix的锁还没用上,后续加上添加topic的功能) image.png

修改post.go

添加AddPost函数,打开文件,对传递过来的post数据序列化,然后写入文件,再更新map索引,此时用lock保证并发安全。 image.png

新增文件

controller/add_post.go、service/add_post.go

controller/add_post.go

仿照之前的代码写即可,调用server.AddPost处理 image.png

service/add_post.go

仿照之前查找的代码写,post数据格式,处理流,check函数,id生成,这里采用idworker得到,再调用repository里Add函数添加帖子。 image.png

image.png 用ID生成器,这里进行初始化,在上述Add函数中使用Next()获取ID  image.png

实验结果

GET查看tpoicId=2的帖子:

image.png

给topicId=2的主题回复一个帖子,回复成功会返回新增帖子的id,再次查看帖子情况,发现已经增加了。

上边是执行post请求,下边再次查看topicid=2的所有帖子 image.png image.png

新增的回复对应的topicId不存在时会返回“TopicId does not exist”的结果提醒用户 image.png

新增帖子之后post文件如下 image.png