摘要:
前言 Go提供了两种定时器, 即 一次性定时器, 周期定时器 一次性定时器:定时器只计时一次,结束便停止 周期定时器:定时器周期性进行计时 本篇将快速介绍这两种定时器的基本用法,重点介绍其内部实现原理,最后再给出一个案例揭示使用定时器的风险。 Timer 定时器 简介 Timer实际上是一种单一事件 阅读全文
摘要:
单元测试的原则,就是你所测试的函数方法,不要受到所依赖环境的影响,比如网络访问等,因为有时候我们运行单元测试的时候,并没有联网,那么总不能让单元测试因为这个失败吧?所以这时候模拟网络访问就有必要了。 对于go的web应用程序中往往需要与其他系统进行交互, 比如通过http访问其他系统, 此时就需要一 阅读全文
摘要:
前言 benchmark测试是实际项目中经常使用的性能测试方法,我们可以针对某个函数或者某个功能点增加benchmark测试, 以便在CI测试中监测其性能变化,当该函数或功能性能下降时能够及时发现。 此外,在日常开发活动中或者参与开源贡献时也有可能针对某个函数或功能点做一些性能优化,此时,如何把be 阅读全文
摘要:
前言 go test有非常丰富的参数,一些参数用于控制测试的编译,另一些参数控制测试的执行。 有关测试覆盖率、vet和pprof相关的参数先略过,我们在讨论相关内容时再详细介绍。 控制编译的参数 -args 指示go test把-args后面的参数带到测试中去。具体的测试函数会根据此参数来控制测试流 阅读全文
摘要:
简介 子测试的一个方便之处在于可以让多个测试共享Setup和Tear-down。但这种程度的共享有时并不满足需求,有时希望在整个测试程序做一些全局的setup和Tear-down,这时就需要Main测试了。 所谓Main测试,即声明一个func TestMain(m *testing.M),它是名字 阅读全文
摘要:
简介 简单的说,子测试提供一种在一个测试函数中执行多个测试的能力,比如原来有TestA、TestB和TestC三个测试函数,每个测试函数执行开始都需要做些相同的初始化工作,那么可以利用子测试将这三个测试合并到一个测试中,这样初始化工作只需要做一次。 除此之外, 子测试还提供了诸多便利, 下面逐一说明 阅读全文
摘要:
Go语言提供了go test 命令行工具,使用该工具可以很方便的进行测试。 不仅Go语言源码中大量使用go test,在各种开源框架中的应用也极为普遍。 目前go test支持的测试类型有: 单元测试 性能测试 示例测试 1.单元测试 1.1项目结构 项目中单元测试的结构如下: [GoExpert] 阅读全文
摘要:
反射概念 反射提供一种让程序检查自身结构的能力: “反射是一种检查interface变量的底层类型和值的机制 反射是困惑的源泉 关于静态类型 你肯定知道Go是静态类型语言,比如int、float32、[]byte等等。每个变量都有一个静态类型,且在编译时就确定了。 那么考虑一下如下一种类型声明: t 阅读全文
摘要:
1. 前言 go并控制一--Channel go并发控制二--WaitGroup context翻译成中文是”上下文”,即它可以控制一组呈树状结构的goroutine,每个goroutine拥有相同的上下文。 典型的使用场景如下图所示: 图中由于goroutine派生出子goroutine,而子go 阅读全文
摘要:
1. 前言 上一篇介绍了 Go并发控制--Channel 下一篇会介绍 Go并发控制--Context 使用channel来控制子协程的优点是实现简单,缺点是当需要大量创建协程时就需要有相同数量的channel,而且对于子协程继续派生出来的协程不方便控制。 2. 使用WaitGroup控制 Wait 阅读全文