Go语言第二课 | 青训营笔记

68 阅读2分钟

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

今天主要学习了Go 语言进阶与依赖管理以及测试的相关知识,第一节课主要是学习了依赖管理,顺带着了解了下了解了协程、channel的相关知识。第二节课则主要学习了单元测试、mock测试和基准测试,最后学习了我了解go语言之后的第一个框架 gin 并对其进行了扩展。

一 、依赖管理、协程、channel的相关知识

说到协程就不得不从并行和并发开始说起

  • 并发(concurrency):把任务在不同的时间点交给处理器进行处理。在同一时间点,任务并不会同时运行。
  • 并行(parallelism):把每一个任务分配给每一个处理器独立完成。在同一时间点,任务一定是同时运行

go语言中有一个东西叫做goroutine是其对于轻量级线程的实现

下表列出了协程线程的区别

区别协程线程
存在形态和调度方式用户态,靠Go调度器调度内核态的,内核调度
上下文切换上下文切换快,不经过os的用户态和内核态切换
栈大小协程栈默认2KB线程栈默认2MB

go语言的CSP(协程间通信) image.png channel
channel是一种引用类型,分为了有缓冲通道和无缓冲通道 最后是写了一个A协程发送0-9数字 b协程计算其平方的一个生产消费模型的程序(梦回操作系统课)
而对于这种并发类型的程序我们首先想到的是如何让线程更安全,则我们引入lock但是这种方法不是特别优雅,我们始终不知道什么时候sleep,go语言则给了一个waitgroup方法来暴露出这些细节。

然后就是依赖管理的一些内容

三要素

  1. 配置文件 go.mod
  2. 中心仓库 goproxy
  3. 本地工具 go get
    剩下的一些东西由于太多,后续慢慢补充