这是我参与「第五届青训营 」笔记创作活动的第2天。今天跟随赵征老师进行了Go语言工程部分的学习,课程分为了语言进阶、依赖管理、测试、项目实战四个方面进行了学习,了解到了Go可以充分发挥多核优势,高效运行的特点,同时赵征老师通过快速打印"hello goroutine"为我们演示了Go语言中并发执行的状态,我发现在这一方面真的是相较于java真的很简洁,然后学习了CSP,协程之间提倡通过通信共享内存而不是通过共享内存从而实现通信,然后老师通过程序带领我们实现了子协程发送0~9数字,以及子协程计算输入数字的平方主协程输入最后的平方数来应征前面的理论,代码如下:
func CalSquare() {
src := make(chan int)
dest := make(chan int, 3)
go func() {
defer close(src)
for i := 0; i < 10; i++ {
src <- i
}
}()
go func() {
defer close(dest)
for i := range src {
dest <- i * i
}
}()
for i := range dest {
// 复杂操作
println(i)
}
}
接着老师通过使用java以及Go语言来进行对比两种语言的并发安全lock变量执行2000次+1操作,5个协程并发执行的代码来进行比较,在我看来各有优点,但是实现方式具体还是Go相对来说更加简洁,同时老师强调了我们以后在项目开发中需要规避对共享内存进行危险操作。第二节课首先通过一些事故让我们认识到测试的重要性,介绍了测试的三种类型--回归测试、集成测试和单元测试,从前到后覆盖率变大,成本变低,每种测试的侧重点也不同,了解了单元测试的大致流程,单元测试的规则,也通过例子加深了理解,其中涉及到assert包的运用、覆盖率的查看和单元测试需要的一些依赖,在测试需要依赖时可以使用的mock打桩包。