在 Go 中 for 用来循环和迭代,
Go 语言没有 whiledountil 这几个关键字,我们只能使用 for。这也算是件好事!
让我们来为一个重复字符 5 次的函数编写测试。

先编写测试用例

package iteration

import "testing"

func TestRepeat(t *testing.T) {
repeated := Repeat("a")
expected := "aaaaa" if repeated != expected {
t.Errorf("expected '%q' but got '%q'", expected, repeated)
}
}

先使用最少的代码来让测试先跑起来

package iteration

func Repeat(character string) string {
return ""
}

把代码补充完整,使得它能够通过测试

func Repeat(character string) string {
var repeated string
for i := 0; i < 5; i++ {
repeated = repeated + character
}
return repeated
}

就像大多数类 C 的语言一样,for 语法很不起眼。

与其它语言如 C,Java 或 JavaScript 不同,在 Go 中 for 语句前导条件部分并没有圆括号,而且大括号 { } 是必须的。你可能会好奇下面这行

    var repeated string

我们目前都是使用 := 来声明和初始化变量。然后 := 只是简写(简短模式定义看这里GO语言学习笔记-类型篇 Study for Go! Chapter one - Type)。这里我们使用显式的版本来声明一个 string 类型的变量。我们还可以使用 var 来声明函数,稍后我们将看到这一点

运行测试应该是通过的

重构

现在是时候重构并引入另一个构造(construct)+= 赋值运算符。

const repeatCount = 5

func Repeat(character string) string {
var repeated string
for i := 0; i < repeatCount; i++ {
repeated += character
}
return repeated
}

+= 是自增赋值运算符(Add AND assignment operator),它把运算符右边的值加到左边并重新赋值给左边。

它在其它类型也可以使用,比如整数类型。

基准测试

在 Go 中编写基准测试(benchmarks)是该语言的另一个一级特性,它与编写测试非常相似。

func BenchmarkRepeat(b *testing.B) {
for i := 0; i < b.N; i++ {
Repeat("a")
}
}

你会看到上面的代码和写测试差不多。

testing.B 可使你访问隐性命名(cryptically named)b.N

基准测试运行时,代码会运行 b.N 次,并测量需要多长时间。
代码运行的次数不会对你产生影响,测试框架会选择一个它所认为的最佳值,以便让你获得更合理的结果。
 
go test -bench=. 来运行基准测试。 (如果在 Windows Powershell 环境下使用 go test -bench=".")

以上结果说明运行一次这个函数需要  109 纳秒(在我的电脑上)。这挺不错的,为了测试它运行了 10294568 次

注意:基准测试默认是顺序运行的。

以上

Go语言 :使用简单的 for 迭代语句进行 TDD 驱动测试开发与 benchmark 基准测试的更多相关文章

  1. 谁说C语言很简单?

    前两天,Neo写了一篇<语言的歧义>其使用C语言讨论了一些语言的歧义.大家应该也顺便了解了一下C语言中的很多不可思异的东西,可能也是你从未注意到的东西. 是的,C语言并不简单,让我们来看看 ...

  2. 用c语言实现简单的五子棋

    用c语言实现简单的五子棋 这个小游戏是从零开始的实现的,框架灵感来自于小游戏<走迷宫>. 游戏代码配置: 二维数组+简单逻辑+getch读取键盘+windows函数(刷屏,改颜色,改窗口大 ...

  3. 实验报告系列:实验一 HTML语言的简单网页制作

    实验一 HTML语言的简单网页制作 一.实验目的: 1.掌握常用的HTML语言标记: 2.利用文本编辑器建立HTML文档,制作简单网页. 3.学习将其它格式的文档转换成HTML格式的文档 二.实验内容 ...

  4. 不可或缺 Windows Native (3) - C 语言: 运算符,表达式,条件语句,循环语句,转向语句,空语句等

    [源码下载] 不可或缺 Windows Native (3) - C 语言: 运算符,表达式,条件语句,循环语句,转向语句,空语句等 作者:webabcd 介绍不可或缺 Windows Native  ...

  5. 李洪强漫谈iOS开发[C语言-042]-简单计算器

    李洪强漫谈iOS开发[C语言-042]-简单计算器

  6. ECMAScript迭代语句

    迭代语句又叫循环语句,声明一组要反复执行的命令,直到满足某些条件为止. 循环通常用于迭代数组的值(因此而得名),或者执行重复的算术任务. do-while, while, for, for-in -- ...

  7. C#迭代语句、跳转语句--C#基础

    1.foreach每执行一次内含的代码时,循环变量就会一次读取集合中的一个元素,不需要个数.循环变量只是一个只读的局部变量,这个值是不能修改的.char后的word是 foreach语句的迭代变量,它 ...

  8. C#流程控制语句--迭代语句(while,do....while, for , foreach)

    迭代语句:有的时候,可能需要多次执行同一块代码.函数中的第一个语句先执行,接着是第二个语句,依此类推. 迭代语句:while(先检查后执行) while(条件表达式 bool类型) { 代码语句 } ...

  9. CoreJava(一)—— Java迭代语句

    本文介绍一些关于迭代语句的一些相关技巧以及Java8中的迭代语句的使用方法. public class TestBreak { public static void main(String[] arg ...

  10. Go语言学习笔记六: 循环语句

    Go语言学习笔记六: 循环语句 今天学了一个格式化代码的命令:gofmt -w chapter6.go for循环 for循环有3种形式: for init; condition; increment ...

随机推荐

  1. Linux 库的使用

    Linux 库的使用 -I头文件的路径-L动态库的路径   命名 使用 静态库 lib名字.a 静态库路径/lib名字.a 动态库 lib名字.so -L动态库路径 -l名字 编译 #静态编译 # g ...

  2. 从Sql Server转战Oracle 之 变量声明

    1 --两种声明方法:没有sql所谓的select或者select @para from table 以及 set 赋值,且赋值的时候需要在begin end事务内 2 一 直接声明 3 declar ...

  3. Spring入门之IoC 的概念和作用(02)

    2.1 程序的耦合和解耦 2.1.1 程序的耦合耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量.耦合的强弱取决于模块间接口的复杂性.调用模块的方式以及通过界面传送数据的多少.模块间的 ...

  4. java mybatisplus+springboot服务器跨域问题

    项目本地增删改测试正常,上传到  阿里服  页面出现了 跨域报错问题! 解决方案:添加一个过滤器 package com.rl;import org.springframework.stereotyp ...

  5. c++ vtdcm对于压缩模式文档图片的读取

    //获取dcm数据结构,一下图像数据仅针对单通道8字节数据 DcmFileFormat fileformat; OFCondition oc = fileformat.loadFile(dcmPath ...

  6. 前端常用函数(find、includes、filter、Set、forEach、map、some、every、findIndex、splice、reduce)

    https://blog.csdn.net/qq_24280125/article/details/119275109 array.join(separator) .拼接返回字符串 参数 separa ...

  7. python脚本监控定时任务

    1.linux服务器中输入命令 crontab -l 查看当前系统的所有定时任务 2. 输入命令 crontab -e ,然后按"i"进行编辑(可新增.修改定时任务).具体定时任务 ...

  8. Java基础Day4-Java方法

    一.方法的定义 Java的方法类似于其它语言的函数,是一段用来完成特定功能的代码片段. 方法包括一个方法头和一个方法体. 修饰符 返回值类型 方法名(参数类型 参数名){      方法体      ...

  9. 阿里云下载ssl证书

    "request合法域名"跟上面CA证书中申请的二级域名一致. Springboot增加证书 创建Springboot项目. 解压缩后,证书文件4375838_wechat.abc ...

  10. Docker 环境规划 (Docker安装)

    一.环境规划 支持Java.dotNet.Vue项目构建 二.切换系统镜像源   1.备份      mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.rep ...