GO语言学习笔记 | 青训营笔记

115 阅读2分钟

这是我参与「第五届青训营」笔记创作活动的第2天。

一、本堂课重点内容:

本节课从首先并发编程的视角带我们了解了Go语言高性能的本质,学习了依赖管理的演进路线,并学习了常用的依赖管理的命令,最后学习了Go单元测试。

二、Go并发编程

线程和协程

image.png

线程是用户态,协程是内核态,一个线程可以跑多个协程

goroutine

Go 程序中使用 go 关键字为一个函数创建一个 goroutine。一个函数可以被创建多个 goroutine,一个 goroutine 必定对应一个函数。

  • 注意:使用 go 关键字创建 goroutine 时,被调用函数的返回值会被忽略。

创建一个简单的goroutine: image.png

CSP

提倡通过通信共享内存而不是通过内存实现通信:

image.png

缓冲区 channel

缓冲区分为有缓冲通道和无缓冲通道

有缓冲通道可以让生产者更加“自由”,使得消费者消费变慢而对生产者产生的影响变小。

image.png

并发安全 lock

加锁可以保证线程、协程的并发安全性问题。

image.png

image.png

从图中可以发现在5个协程并发执行的时候,加锁很好的保证了并发安全性。

waitGroup

image.png

图中的wg.Add(5)意味着等待子协程done5次后,主协程恢复执行。

三、依赖管理

演进路线:

image.png

直接依赖与间接依赖

image.png

indirect表示间接依赖

image.png

GO PROXY

go proxy可以起到一个缓存的作用,在上游的依赖突然发生变化的时候,因为Proxy的存在,该变化不会直接影响项目的依赖,避免了这种情况下项目依赖版本报错的问题。 image.png

依赖分发的准则

首先会到proxy1中寻找依赖,proxy1中没有则会去proxy2中去寻找,proxy2中也没有则会去源站寻找。

image.png

go get的使用

image.png

go mod的使用

image.png

四、测试

主要学习了单元测试、mock测试和基准测试。

  • 单元测试中需要注意代码覆盖率的问题。
  • mock测试通过打桩实现了不再依赖本地文件。
  • 基准测试是指测试程序的运行性能以及耗费cpu的程度。

五、总结:

今天主要学习了GO并发编程、依赖管理以及测试相关的知识。今天同时也是青训营的第二天,希望自己可以把写博客这个好习惯坚持下去,及时复盘。

六、引用参考: