协程与依赖管理 | 青训营笔记

110 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天。 今天我学习了go语言进阶与依赖项管理。

一 本节课重点内容

本节课讲了编程语言中线程的概念,大致的讲述了在计算机中,一个进程之下可以有多个线程并发的运行,多线程可以利用现代cpu的多核的特点,即每个线程可以在不同的cpu内核中运行,可以提升程序的性能。以此为开头,讲师接着介绍了golang编程语言中协程的概念。协程是更轻量级的线程,协程之间通信,可以使用go语言中channel内置类型来实现,也就是在channel的两端,两个协程可被视作生产者和消费者,生产者将产生的数据通过channel提供给消费者,如果消费者接受数据的操作要慢于生产者,那么channel定义时最好要设置为带缓冲,以便生产者发送数据正常。另一方面,为了让主协程可以等到所有字写成全部结束后再结束,可以使用go语言标准库中的waitgroup类型。使用通道是go语言提倡的通信以达到共享内存的目的,同时go语言还支持了共享内存以通信,那么在这种情况下,可以为协程上锁的方法,来避免数据竞争的不安全问题,比如两个协程同时对一个数据进行操作,数据可能只是被操作了一次。课程的后半部分是go原因依赖管理,在go语言早期,是使用gopath目录来管理依赖项的,后来就是vender,然后就是今天我们使用的go.mod文件。go.mod文件记录了依赖项的版本,并且在依赖项拉取时,首先通过代理站点,站点没有的话就从原地址拉取。同时还提供了两个工具,go get和go mod