07《Go语言入门》测试用例、变量和常量
从这篇文章开始,为了方便测试代码,我将基本上所有示例代码都写成了测试用例,因此需要先学下测试用例怎么编写,这真的很重要,这是任何工程的开始必做的步骤。
然后讲解了单个或多个变量和常量的定义,常量的讲解包括枚举、常量表达式、iota常量、比特位常量等。
重要知识点:
- 全局变量声明后不使用,程序能够编译成功;而局部变量不可以,声明后必须得使用。
- 变量短声明方式只能在函数内使用,函数外使用会报错
unexpected
- 常量不管全局还是局部,声明后可以不使用。
⚡️这是我纯手写的《Go语言入门》,源码+文章,手把手教你入门Go。看了你就会!
⚡️文章中所有的代码我都放到了 github.com/GanZhiXiong/go_learning 这个仓库中!
⚡️看文章时,对照仓库中代码学习效果更佳哦!
测试用例
在开始讲解变量和常量之前,先简单讲下Go测试程序如何编写。
在Go中对测试程序作了如下规定:
- Go文件名以
_test
结尾,如:my_test.go
- 测试方法名以Test开头,如:
func TestMy(t *testing.T)
例如下图所示
命令行中运行请使用go test -v xxx_test.go
,不能使用go run xxx_test.go
,这个问题在03《Go语言入门》GoPath 和 GoRoot简介也有讲过。
如果闲func TestMy(t *testing.T)
输入麻烦,使用GoLand的话,直接输入tes
后,按tab即可自动输入。
后面我也会专门写一篇测试用例的文章。
变量
注意:全局变量声明后不使用,程序能够编译成功;而局部变量不可以,声明后必须得使用。
定义单个变量
使用var
1
2var v int
var a int = 1不使用var和变量类型
但是这种短声明方式只能在函数内使用,函数外使用会报错unexpected
1
b := 2
定义多个变量
1 | var ( |
1 | var ( |
1 | var e, f = 5, "f" |
定义变量的时候如果在声明的时候初始化,推荐省略变量类型,因为编译器会根据初始化值自动推导类型。
示例
斐波拉契数列
为了熟悉变量的定义,我编写了用Go语言实现斐波拉契数列的代码。
1 | func TestFibList(t *testing.T) { |
交换两个变量的值
在Go中交换两个变量可以不需要中间变量,通过a, b = b, a
即可实现。
1 | func TestExchange(t *testing.T) { |
常量
常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。
常量的定义格式:
1 | const identifier [type] = value |
你可以省略类型说明符 [type],因为编译器可以根据变量的值来推断其类型。
- 显式类型定义: const b string = “abc”
- 隐式类型定义: const b = “abc”
多个相同类型的声明可以简写为:
1 | const c_name1, c_name2 = value1, value2 |
注意:常量不管全局还是局部,声明后可以不使用。
枚举
常量还可以用作枚举:
1 | const ( |
常量表达式
常量可以用len(), cap(), unsafe.Sizeof()函数计算表达式的值。常量表达式中,函数必须是内置函数,否则编译不过:
1 | const ( |
iota常量
iota,特殊常量,可以认为是一个可以被编译器修改的常量。
iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。
iota 可以被用作枚举值:
1 | const ( |
比特位常量
使用iota可以给连续的比特位常量赋值,如:
1 | const ( |
1 | func TestConstant1(t *testing.T) { |
考察
如果下面这道题的结果你算对了,那你就理解了iota在枚举中的使用。
1 | func TestConstant3(t *testing.T) { |
07《Go语言入门》测试用例、变量和常量