GO语言进阶与依赖管理笔记| 青训营

73 阅读2分钟

一、GO并发与同步

1、GO语言可以充分发挥多核优势,高效运行。协程(Goruntine),可以理解运行在用户态的轻量级的特殊的线程,协程的栈一般在KB级别,而线程(内核态)的栈一般在MB级别。GO语言可以一次性创建大量协程,这也是GO语言适合高并发的原因。

2、GO语言提倡通过通信共享内存而不是通过共享内存而实现通信。但GO语言保留了通过共享内存而实现通信的方式,即使这种方式会在一定程度上影响程序性能。GO语言通过通道(Channel)来实现协程间通信,使用make关键字创建通道:

make(chan 元素类型,[缓冲大小]) 其中缓冲大小是可选参数。

需要注意的是,如果通道不带缓冲,发送方会阻塞直到接收方从通道中接收了值。如果通道带缓冲,发送方则会阻塞直到发送的值被拷贝到缓冲区内;如果缓冲区已满,则意味着需要等待直到某个接收方获取到一个值。接收方在有值可以接收之前会一直阻塞。

       channel := make(chan int,[2])
       i := 1
       channel <- i         //把变量i发送到通道中
       j := <-channel       //从通道中接收

二、GO依赖管理

GO依赖管理系统有以下三种版本:GOPATH、GO Vendor、GO Module。不同环境和项目依赖不同。

1、GOPATH的环境变量$GOPATH。GOPATH存在的问题是无法实现package的多版本控制。

2、GO Vendor通过每个项目引入一份依赖的副本,解决了多个项目需要同一个package依赖的版本问题。GO Vendor存在的问题是无法控制依赖的版本,且更新项目又可能出现依赖冲突。

3、GO Module可以定义版本规则,管理项目依赖关系,这是依赖管理的终极目标,解决了之前的问题。