这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
进阶知识:
一、select关键字:
在之前channel的基础上,golang提供了个关键字select,可以用来监听channel上的数据流动,帮我们避免用channel来实现发送和接受数据时造成的堵塞。
使用的示例代码如下:
select {
case <- channel1:
// 如果channel1成功读到数据,则执行该case处理语句
case channel2 <- 1:
// 如果成功向channel2写入数据,则执行该case处理语句
default:
// 如果上面都没有成功,则执行这里面的语句流程
}
对于管道阻塞与否,select语句也有两大种情况。第一种:当case语句至少有一条是没有被堵塞的时候,就会从这些没有被堵塞的语句里选取任意一条来执行。第二种,当case语句中所有的都被阻塞时,又分为两小种情况。第一小种:有default语句时,会执行default语句,同时程序的执行会从select语句后的语句中恢复。第二小种:那就是没有default语句时了。这时select语句将被阻塞,直到至少有一个通信可以进行下去。
二、Go Modules:
Go modules是golang的依赖解决方案,它在我们安装了golang后就可以使用了。
而在讲解如何使用go modules之前,让我们先来认识下go path。虽然说go path被go modules逐渐取代了,但是它的弊端却能让我们对go modules有一个更好的认知。go path的目录下一般来说都会有三个子目录,bin包,pkg包和src包。bin用来存储所编译生成的二进制文件,pkg用来存储预编译的目标文件,src用来存储所有.go文件或源代码。同时,如果引用到外部依赖的话,会自动下载到go path目录下。
go path模式的弊端:在go path目录下的src包存储.go文件或源代码,我们可以称其为go path模式。而这个模式有一些弊端,比如:没有版本控制,也就是你也不知道你下载或更新的是哪个版本。无法一致第三方版本,当我们进行团队协作的时候,就很难和其他人保持一样的版本。无法指定当前项目引用的第三方版本。