“这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
今天的课程主要分为四个方面:
- 并发编程
- 依赖管理
- 单元测试
- 项目实战
一、 并发编程
- 协程Goroutine
- 通道Channel
- 锁Lock
- 线程同步WaitGroup
二、 依赖管理
- Gopath
- GoVendor
- GoModule
三、 单元测试
- 单元测试概念和规则
- Mock测试
- 基准测试
四、 项目实战
- 实现一个展示话题(标题,文字描述)和回帖列表的后端http接口;
- 本地文件存储数据
并发编程和依赖管理部分的内容都比较基础,我也认为老师已经讲的十分明了了,这里我就不再赘述单元测试部分老师也讲的挺好的,补充知识的话可以在go语言圣经的第十一章测试中补全(测试 - Go语言圣经 (gopl-zh.github.io))
今天的实践是
- 支持对话题发布回帖。
- 回帖id生成需要保证不重复、唯一性。
- 新加回帖追加到本地文件,同时需要更新索引,注意Map的并发安全问题。
首先是repository层,repository层是资源层和数据库进行对接,所以我们仅需要定义出topic和post必须的元素的结构体即可
type Topic struct {
Id int64 `json:"id"`
Title string `json:"title"`
Content string `json:"content"`
CreateTime int64 `json:"create_time"`
}
type Post struct {
Id int64 `json:"id"`
TopicId string `json:"topicid"`
Content string `json:"content"`
CreateTime int64 `json:"create_time"`
}
然后我们实现controller层,controller层是监听器层,与视图层对接,这里由于篇幅问题我就只放一个发布回帖部分的代码了
最后我们需要实现service层,service层是业务层负责实现业务逻辑
我们第一个要解决的是id互不相同的问题,这里的简单实现是用时间戳生成,可以使用官方的time包实现time.now().unix,这里我使用了第三方库
最后要解决的问题是如何对话题和回帖进行索引,我们可以使用简单的map实现,首先定义全局索引map
最后需要解决的就是新加回帖追加到本地文件,同时需要更新索引,注意Map的并发安全问题