Go进阶与依赖管理(day2)| 青训营笔记

53 阅读2分钟

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

1.Go语言进阶,并发编程

1.使用并发编程时,只需要将要进行的操作封装进函数,使用go关键字启动,即可让另一个goroutine去执行它。
2.协程之间的并行是乱序的,父进程要花时间等待子进程(后面会讲解更为优雅的方式,见4),否则不等子进程运行,父进程就挂掉了。

func hello(i int) {
   println("hello goroutine : " + fmt.Sprint(i))
}

func HelloGoRoutine() {
   for i := 0; i < 5; i++ {
      go func(j int) {
         hello(j)
      }(i)
   }
   time.Sleep(time.Second)
}

2.协程间通信 image.png 后者依赖临界区,一定程度上会影响性能。而前者使用channel(通道),使用make来使用,分为有缓冲通道和无缓冲通道,区别在于有无阻塞。
3.使用lock来管理共享内存,尽管不推荐,,但是我们依然会使用共享内存,此时,就需要引入lock,对多进程中使用的共享内存的并发安全进行保护(实践中并发安全问题有概率出现,且难定位,每次出现问题时结果有可能不一样。)。
4.使用waitgroup进行协程间同步,共有三个方法,Add(增加计数器),Done(完成一个并发任务就-1),Wait(等待,直到计数器为0)。

2.依赖管理

“我们要学会站在巨人的肩膀上!”
1.Gopath,go语言的工作区。弊端:无法实现package多版本控制。
2.Go Vendor解决了刚刚的问题,每个项目引入依赖的副本解决依赖冲突问题。弊端:无法控制依赖版本。
3.Go Moudle:定义版本规则和管理项目依赖关系。

3.测试

1.单元测试,其覆盖率一定程度上决定了代码质量。
image.png
Tips:单元测试有三个规则约束:以_test.go结尾,函数名以Test开头,初始化逻辑在TestMain中。 2.mock测试:可以1.为函数打桩2.为方法打桩。(底层原理相当于把要调的那个函数的地址替换掉了)
3.基准测试框架:用来测试一段程序的运行性能和CPU损耗。可以通过此方法,寻找程序性能的瓶颈。

相关参考技术博客推荐

Go 语言并发编程系列(九)—— 利用多核 CPU 实现并行计算 - 腾讯云开发者社区-腾讯云 (tencent.com)

Go语言CSP:通信顺序进程简述 (biancheng.net)

(57条消息) 彻底搞懂golang的GOROOT和GOPATH_知更鸟女孩的博客-CSDN博客_golang gopath goroot

搞定Go单元测试(二)—— mock框架(gomock) - 掘金 (juejin.cn)

基准测试 · Go语言圣经 (studygolang.com)