常量
在Go语言中,常量是指编译期间就已知且不可改变的值。常量可以是数值类型(包括整型、浮点型和复数类型)、布尔类型、字符串类型等。
一、字面常量(常量值)
所谓字面常量(literal),是指程序中硬编码的常量,如:
123
3.1415 // 浮点类型的常量
3.2+12i // 复数类型的常量
true // 布尔类型的常量
"foo" // 字符串常量
也就是说印刷厂刷钱,那个钱一刷出来就是一百块或者20块,它后面是改变不了这个值的,就算你使用了这个20块那么他还是20块,只是不在你这里了而已。常量的意思是不可改变的。
二、常量定义
const Pi float64 = 3.14
const zero = 0.0 // 浮点常量, 自动推导类型
const ( // 常量组
size int64 = 1024
eof = -1 // 整型常量, 自动推导类型
)
const u, v float32 = 0, 3 // u = 0.0, v = 3.0,常量的多重赋值
const a, b, c = 3, 4, "foo"
// a = 3, b = 4, c = "foo" //err, 常量不能修改
只要是使用const
修饰的变量都是不能修改的。
三、iota枚举
常量声明可以使用iota
常量生成器初始化,它用于生成一组以相似规则初始化的常量,但是不用每行都写一遍初始化表达式。在一个const
声明语句中,在第一个声明的常量所在的行,iota将会被置为0,后面每加新增一行,常量值会自动加1。
const (
x = iota // x == 0
y = iota // y == 1
z = iota // z == 2
w // 这里隐式地说w = iota,因此w == 3。其实上面y和z可同样不用"= iota"
)
const v = iota // 每遇到一个const关键字,iota就会重置,此时v == 0
const (
h, i, j = iota, iota, iota //h=0,i=0,j=0 iota在同一行值相同
)
const (
a = iota //a=0
b = "B"
c = iota //c=2
d, e, f = iota, iota, iota //d=3,e=3,f=3
g = iota //g = 4
)
const (
x1 = iota * 10 // x1 == 0
y1 = iota * 10 // y1 == 10
z1 = iota * 10 // z1 == 20
)
也就是说:就像生孩子一样,跨一行就是比你早生一年,那你还是0岁,别人在你下面那行的就1岁,在你下面两行的就2岁,如果和你同一行的那就是和你同岁,他0岁你也0岁。
//大一年的例子:
const (
x = iota // x == 0
y = iota // y == 1
z = iota // z == 2
w // 这里隐式地说w = iota,因此w == 3。其实上面y和z可同样不用"= iota"
)
//同年的例子:
const (
h, i, j = iota, iota, iota //h=0,i=0,j=0 iota在同一行值相同
)