Go进阶|青训营笔记

38 阅读4分钟

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

一、本堂课重点内容:

  • 了解Go语言的并发编程
  • 了解Go语言的依赖管理
  • 学习Go语言如何做单元测试

二、详细知识点介绍:

1.Go语言的并发编程:

1.1.协程与线程

协程与线程的概念。协程是更小一级的线程,他比线程更加轻量。线程是内核态的,能够在一个线程上跑多个协程,有点像以前进程和线程的概念。而协程是用户态的,它比线程更加高效,在CPU切换到另一个协程时所耗费的时间和资源更少。Go语言通过以协程为单位使得它能够支持更高的并发的同时还能有较快的速度。在Go语言中可以通过go关键词+函数的方式来创建一个协程。

1.2.协程间通信

在Go语言中提倡通过通信来实现共享内存而不是通过共享内存来实现通信。在以前线程之间通过维护共享内存变量来与其他的线程通信,但在Go语言中一般通过channel通信管道来实现内存之间的共享。channel可以使用make来创建。channel可以分为有缓冲,无缓冲这取决于channel在被创建时是否拥有默认的长度。共享内存容易导致并发的不安全,容易导致协程之间产生竞态。为此,可以在Go语言中sync.Mutex来定义Lock来实现并发安全。除此之外,与线程一样,协程也可以被阻塞,可以创建WaitGroup类型的变量,再调用Wait()函数来实现阻塞一个协程。

2.Go语言的依赖管理:

对于一个项目而言,依赖管理是十分必要的,因为一个项目或多或少都依赖于一些包,而这些包的版本与管理就需要特定的工具了。Go语言的依赖管理主要历经三个阶段,从最开始的GOPATH,到Go vender,再到现在使用的最广的Go Module。依赖管理主要分为三个要素:1.配置文件,描述依赖。2.中心仓库管理依赖库。3.本地工具。在Go Module中,配置文件,描述依赖这个环节主要是由go.mod配置文件来实现的,类似于在Springboot中管理依赖的pom.xml文件,go.mod文件的生成需要我们使用命令行go mod init +项目名来创建。中心仓库管理依赖主要是为了解决存放包的网站负荷过大的问题,在Go中,可以去配置环境变量env中的GOPROXY来实现指定依赖的代理。本地工具为go get/mod,用来从代理库或者源库中下载依赖。

3.Go语言的单元测试:

在代码正式开发上线前,会进行测试,测试代码可以对功能进行更完备的校验。在Go执行单元测试时应该遵守以下规则:(1)将所有测试文件以_test.go结尾,这样会使得测试文件排在源代码下面,便于管理。(2)函数最好以Testxxx来作为名字,能够明显标识是测试代码(3)将初始化逻辑放到Testmain里面。通常使用代码覆盖率的概念来衡量,代码覆盖率指的是在单次单元测试中被检测到的代码占全部代码行的数量。一般达不到100%,在平时的开发环节通常能够达到50%-60%。

三、实践练习例子:

练习了实战项目,对Go项目的开发有了相应的认识,从创建配置文件到下载相应的依赖。

四、课后个人总结:

  • 在本章的学习中,对Go的并发编程有了相应的认识,了解了协程的概念,从高并发的角度对Go语言的性能有了良好的认识。学习了Go的依赖管理和单元测试的相关知识
  • 对于Mock测试与函数打桩的相关知识还是不太清楚