Go语言进阶 | 青训营笔记

60 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天 今天是Go的进阶课程,明显感觉到本次课程的难度不同于第一节课,学习起来开始有些费力了。

主要知识点

  1. 并发编程
  2. 依赖管理
  3. 单元测试

并发编程

Go支持并发,且只需要关键字go开启goroutine即可。

1、goroutine,是Go中的一种轻量级线程,它的调度是由Go运行时进行管理的。

2、通道即channel是用来传递数据的一个结构。通道可用于两个 goroutine 之间通过传递一个指定类型的值来同步运行和通讯。操作符 <- 用于指定通道的方向,发送或接收。如果未指定方向,则为双向通道。声明的方式也很简单,使用chan关键字即可,在使用前必须使用make创建,如ch := make(chan int)

3、Lock,就是采用锁的机制来确保数据的安全性。 可以采用var声明一个锁,获取锁的函数为Lock,解锁为Unlock,如lock.Lock()以及lock.Unlock()

4、WaitGroup,实现主程序的阻塞,例如使用defer wg.Done()即可延迟执行。

依赖管理

1、GOPATH,项目代码直接依赖src下的代码,可以使用go get下载更新最新的代码包到src目录下。

2、GO Vendor,通过每个项目引入一份依赖的副本,这可以解决多个项目需要同一个package依赖的问题;弊端:无法控制依赖的版本。更新项目可能又出现依赖错误。

3、GO Module,通过go.mod文件管理依赖包版本;通过go get/ go mod指令工具管理依赖包。值得注意的点:依赖选择时,会自动的选择最高的兼容版本;没有必要保存多个版本。

单元测试

通过单元测试,可以很大程度上减少项目开发过程遇到的问题与漏洞,减少后期的维护成本并且尽可能的避免线上事故,具有有分重要的作用和意义。

单元测试主要包括输入、测试单元、输出和校对,通常采用最后的校对来确保代码的的功能是否合理以及是否符合预期。

注:在通常实际项目的开发中,单元测试的占比覆盖率要求一般为50%-60%。

课后总结

本节课明显感到课程的难度上升了,不过通过老师细致的讲解再加上自己动手完成老师给出的练习和课上的代码,也切实感受到了提升。