1、常量概述
- 常量是一个固定值,在编译期就确定其结果(即程序还未运行时常量就已经有值了),声明时必须赋值且结果不可改变
- 因为常量在编译期就确定,从而可以防止程序在运行过程中意外修改,而变量随着程序运行值可能在变化。
- 常量关键字是const,变量是使用var定义
- 常量定义完可以不用使用,变量声明完必须至少使用一次
- go语言中常量的定义没有明确的语法要求,可以不全大写驼峰即可。
2、常量的定义
- 定义常量时如果不是必须指定特定类型,则可以省略类型,使用默认类型。且数值类型常量(不定义类型,可以是不太类型)可以直接进行运算,而两个同类型的变量才能进行运算。
- 常量的值可以是表达式但不允许出现变量。
- 注意平常定义常量类型都不会写出
- 当定义多个常量的时候,官方推荐使用常量组
- 当定义常量时,后一个常量如果没有赋值那么会与前一个常量值相同且第一个常量必须赋值
3、常量生成器
- 当一组常量都是数值类型,可以使用常量生成器iota指定这组常量按照特定规则变化
- iota起始值为0,每次增加1
// 常量生成器iota
const (
a = iota
b
c
)
fmt.Println(a, b, c)//0 1 2
const (
d = iota + 8
e
f
)
fmt.Println(d, e, f)//8 9 10
const (
g = iota << 1 //0右移一位还是0
h //h是1(01 二进制右移一位变10=2十进制)
l //l是2(10 二进制右移一位变100=4十进制)
)
fmt.Println(g, h, l)//0 2 4
- 无论是否使用iota,常量组中每个常量的iota值都是固定的,iota按照顺序自增1。
- 每个常量组直接的iota值无影响。
const (
m = 34 //iota=0
n = iota //iota=1
o //iota=2
p = 12 //iota=3
q = iota //iota=4
x //iota=5
)
fmt.Println(m, n, o, p, q, x)//34 1 2 12 4 5
总结:在一个常量组中如果未使用iota赋值则至少给常量组中的第一个常量赋值,且后一个常量如果没有赋值那么会与前一个常量值相同;一个常量组中的任意常量不管是否用iota赋值每个常量都有一个iota值,且按顺序从0自增1;如果常量组中的某一常量是另外赋值的,那么该常量的实际的值是另外赋给的值。