go依赖管理 | 青训营笔记

39 阅读2分钟

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

  • 多个协程带打印hello gorouting的例子,用watigroup实现协程的同步阻塞。首先通过add方法,对计数器+5,然后开启协程,每个协程执行完后,通过done对计数器减少1,最后wait主协程阻塞,计数器为0 退出主协程。右边是最终的输出结果。
  • go并发编程整个章节主要涉及3个方面,一个是协程,通过高效的调度模型实现高并发操作,一个是通道channel,通过通信实现共享内存,最后sync相关关键字,实现并发安全操作和协程间的同步。
  • 在实际工程开发中,一个重要概念就是依赖管理,主要涉及go依赖管理的演进路线和go module实践。
  • 依赖指各种开发包,我们在开发项目中,需要学会站在巨人的肩膀上,也就是利用已经封装好的、经过验证的开发组件或工具来提升自己的研发效率。
  • 对于hello world以及类似的单体函数只需要依赖原生SDK,而实际工程会相对复杂,我们不可能基于标准库0~1编码搭建,而更多的关注业务逻辑的实现,而其他的涉及框架、日志、driver、以及collection等一系列依赖都会通过sdk的方式引入,这样对依赖包的管理就显得尤为重要
  • 而Go的依赖管理主要经历了3个阶段,到目前被广泛应用的go module,整个演进路线主要围绕实现两个目标来迭代发展的。
  • 首先是GOPATH。 GOPATH是Go语言支持的一个环境变量,value是Go项目的工作区。 目录有以下结构:src:存放Go项目的源码;pkg:存放编译的中间产物,加快编译速度;bin:存放Go项目编译生成的二进制文件。
  • 弊端:同一个pkg,有2个版本,A->A(),B->B(),而src下只能有一个版本存在,那AB项目无法保证都能编译通过。也就是在gopath管理模式下,如果多个项目依赖同一个库,则依赖该库是同一份代码,所以不同项目不能依赖同一个库的不同版本,这很显然不能满足我们的项目依赖需求。为了解决这问题,govender出现了。