在上一篇章,我们已经学习了Go基础数据类型,那么这一篇章我们来学习一下Go的常量。
在讲解常量之前,我们要先简单说一下我们前面讲解的变量。我们都知道,变量是用来存储数据,并且变量里面存储的值是可以在程序运行时随时发生变化的,例如如下案例,结果输出是多少?
package main
import "fmt"
func main() {
var number int
number = 10
number = 20
fmt.Println("number=", number)
}
执行如下:
number= 20
最终的输出结果是20,因为重新给number变量赋值。
但是,常量里面的值确定好后,后面是不允许修改的。下面看一下关于常量的定义使用:
package main
import "fmt"
func main() {
//变量:程序运行期间,可以改变的量,变量声明需要var
//常量:程序运行期间,不可以改变的量,常量声明需要const
//1.定义常量
const a int = 10 // 常量不允许修改
fmt.Println("a = ", a)
//自动推导类型
const b = 11.2 // 常量的自动推导不需要使用 :=
fmt.Println("b = ", b)
}
执行如下:
a = 10
b = 11.2
常量的命名规范与变量命名规范一致。
问题:什么场景下会用到常量呢?
在程序开发中,我们用常量存储一直不会发生变化的数据,例如:π,身份证号码等。像这类的数据,在整个程序中运行中都是不允许发生改变的。
所谓字面常量(literal),是指程序中硬编码的常量,如:
123
3.1415 // 浮点类型的常量
3.2+12i // 复数类型的常量
true // 布尔类型的常量
"foo" // 字符串常量
常量声明可以使用iota常量生成器初始化,它用于生成一组以相似规则初始化的常量,但是不用每行都写一遍初始化表达式。
注意:在一个const声明语句中,在第一个声明的常量所在的行,iota将会被置为0,然后在每一个有常量声明的行加一。
具体使用方式如下:
package main
import "fmt"
func main() {
//1.iota常量自动生成器,每个一行,自动累加1
//2.iota给常量赋值使用
const (
a = iota // 0
b = iota // 1
c = iota // 2
)
fmt.Printf("a=%d, b=%d, c=%d\n", a, b, c)
// 3. iota遇到const,重置为 0
const d = iota
fmt.Printf("d=%d\n", d)
// 4. 可以只写一个iota
const (
a1 = iota // 0
b1
c1
)
fmt.Printf("a1=%d, b1=%d, c1=%d\n", a1, b1, c1)
//5.如果是同一行,值都一样
const (
i = iota // 0
j1, j2, j3 = iota, iota, iota // 1
k = iota // 2
)
fmt.Printf("i=%d, j1=%d, j2=%d, j3=%d, k=%d\n", i, j1, j2, j3, k)
}
执行如下:
a=0, b=1, c=2
d=0
a1=0, b1=1, c1=2
i=0, j1=1, j2=1, j3=1, k=2