这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天 Go语言进阶与依赖管理
#Go与并发编程:
我们都知道,对于一个单线程环境,单个程序只能同时执行一个操作,其他操作必须等待该程序完成当前操作后,才能执行。简单来说,**如果将程序执行任务当作开车通过高速公路的收费站,程序本身当作高速公路,那么以前的单线程程序便是只有一个车道的高速公路,同一时刻只能有一辆汽车通过收费站,后面的汽车都必须等待前面的汽车**。对于很多程序来说,这种单线程的情况很显然是不够用的:考虑一个 Web 服务器程序,当我们与一个用户建立连接并进行通讯时,**如果有其他用户也想访问这个网站,那么他就必须等待这个用户和网站结束通讯!** 这很显然是不可接受的。
#Go与依赖管理
要想了解依赖管理,首先我们必须知道为什么需要它。考虑这么一个情况:你的代码不可能只引用自系统库和语言标准库,很大概率的,你要使用来自网络的,第三方的,其他开发者的依赖库,例如某些 ORM 框架,HTTP 框架等。这些依赖库来自不同站点的不同存储库,拥有不同的版本;这些依赖库本身也拥有许多依赖......
对于go的依赖管理,经历了Go Path,Go Vender,Go Module三个阶段
GO与单元测试
为什么需要单元测试:
通常,对于一个玩具项目,我们喜欢将其写完后直接部署到生产环境,有 Bug 在修,但是,这对于企业开发来说是完全不能忍受的,因为一个小小的 Bug 便可带来天文数字的损失。因此,在程序上线前进行测试对于企业开发来说便是一个必要的活动。
通常,有多种测试方法可以使用,例如回归测试,集成测试,单元测试,而单元测试(Unit Test) 是成本最低,覆盖率最高的测试方法。所谓单元测试,便是为代码的每一个模块,函数定制单独的测试,保证输入指定值后输出正常值。通过多个单元测试合并运作,我们便可得知项目的每一个细节都在正确运行,最终得知项目整体运作正常。
进行单元测试
Go 内置单元测试支持。所有以 _test.go 结尾的代码会被 Go 识别为单元测试文件。
一个单元测试函数的函数名应当以 Test 开头,并包含 *testing.T 形参。
可通过 func TestMain(m *testing.M) 函数对测试数据进行初始化,并调用 m.Run() 运行单元测试。