这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
学习收获:今天课程最大的收获是了解了Go项目开发过程中的整体思路。
下面是我在今天学习过程中所思考和总结的笔记,希望能够对大家有所帮助。
课程重点内容
下面是今天课程中所讲解的知识点,其中项目工程实战是今天讲解的重点。
- 并发编程
- 依赖管理
- 单元测试
- 项目实战
知识点介绍
下面是我对本节课程知识点的总结介绍。
Go高并发编程
Go之所以能够高效快速的运行,是因为它可以充分发挥硬件其多核的优势,进行并行运行。
我们可以使用go 关键字来创建Goroutine协程来并行运行。Goroutine之间提倡使用通信共享内存,而不提倡共享内存来实现通信。可以使用make(chan 元素类型,[缓冲大小])语句来创建Goroutine之间的通道。
在我们使用go关键字进行并发编程的时候,需要特别注意并发安全的问题,可以使用sync.Mutex来保证并发安全。sync。WaitGroup可以用来保证等待协程执行结束。
依赖管理
有过其他语言项目开发经验的同学一定对依赖管理不陌生吧,比如在Java开发的过程中大家一般都使用maven来进行依赖管理。
这里直接介绍Go语言现在最常用的依赖管理工具Go Module,不再对依赖工具的演进历程做过多叙述。
Go Module是使用go.mod文件来进行文件管理依赖包版本,通过go get和go mod指令来管理依赖包。go的依赖包一般都是从Proxy中进行拉取,熟悉maven的同学一定知道maven管理的依赖都是从maven仓库中来拉取的,这里的Proxy就可以理解为maven中的maven仓库。
单元测试
通过测试,我们可以大大的减少项目的维护成本和避免线上事故。其中单元测试是最为基本的测试。接下来我们介绍如何来编写一个单元测试,以及什么样的单元测试才算是一个好的单元测试。
Go中的测试文件以_test.go结尾,测试方法的定义格式如下func TestXxx(t *testing.T)。go中的单元测试还提供了TestMain方法,我们可以在TestMain方法中进行测试数据的初始化和资源释放。同时我们还可以导入"github.com/stretchr/testify/assert"来帮助测试,具体用法和Spring测试中的assert用法类似。
一个好的单元测试的标准应该是可以独立运行的,并且代码覆盖率是越高越好。为了保证单元测试函数可以独立运行,并且不依赖于其他函数和数据,我们可以对函数进行打桩,需要用到monkey:https://github.com/bouk/monkey
项目实战
课程中举了一个帖子和回复的简单项目例子。将后端设计分为了三层架构,分别是数据层、逻辑层、视图层。
在实现的过程中,使用了gin这个go web框架,使用go module进行依赖管理。
时间原因,具体实现这里就不再叙述,大家可以自己动手去跟着复现,更有利于对于自己的理解。
课后总结
我认为本节课还是能够很好帮助理解项目开发流程的。下面是我是为的课程重点:
- 使用go module进行依赖管理
- 项目中导入gin框架并进行路由分发
- 项目设计思路的整理,了解Java web开发的同学应该不会陌生
- 项目中数据结构的设计,设计一个合理的结构来存储数据是成功开发项目的基石。