Go 语言中常量详解
本章节我们介绍 Go 变量。所谓常量,和变量基本上相同,也可以认为就是给内存中一块区域指定一个名称。我们可以通过这个名称直接访问这块儿内存。
但是它和变量不同的是,常量一旦被定义,那么它的值就不能再被修改。也就是相当于指定的那块儿内存除了在定义的时候写进去一些数据之外,其他时候只能读,不能写。
常量和变量一样,也要指定数据的类型。它可以是任何基本数据类型,如整数常量、浮点常量、字符常量或字符串常量等。
注意
:常量和变量在定义的时候有些差别。变量可以只声明不初始化值进去,而常量必须进行初始化。这是根据常量的性质来的,因为常量一旦被声明就不能变了。因此只声明而不初始化值的常量是没有任何意义的。因此在编译阶段就会报错
下面我们来看一下常量的定义语法。常量使用 const
关键字来定义
const cname [type] = value
或者
const cname1, cname2 = value1,value2
示例
package main
import "fmt"
func main() {
const LENGTH int = 10
const WIDTH int = 5
var area int
area = LENGTH * WIDTH
fmt.Printf("面积值为 : %d", area)
}
编译执行上面的代码,如果如下
面积值为 : 50
常量枚举
常量除了可以像上面那样定义之外,还可以使用下面这种方式进行枚举
const (
a = 0
b = 1
c = 2
)
在Go 变量详解一节我们详细介绍了变量的定义。但是我们漏了一点,变量的枚举,它的定义方式和常量枚举是相同的,只是关键字是使用 var
var ( va = 0 vb = 1 vc = 2 )
我们在这里进行一个补充
iota
iota 是一个特殊的常量,它是由编译器自动来修改的。对于用户来说是透明的,开发者只需要知道它的用法即可。
iota 在 const关键字出现时将被重置为 0。const 中每新增一行常量声明将使 iota 计数一次。
可以认为 iota 是一个标记,在连续的常量声明时会自动增加 1。
const (
a = iota
b = iota
c = iota
)
上面的 a、b 和 c 分别为 0、1和2。像上面的情况,后面的itoa
关键字可以省略,只保留第一行的即可
const (
a = iota
b
c
)
注意
- 需要特别注意的是,itoa 的省略只能是保证所有的都连续,也就是说中间不能有其他的赋值,否则后面的常量的值就不是连续的自增的了。
const (
a = iota //0
b //1
c //2
d = "ha" //独立值,iota += 1
e //"ha" iota += 1
f = 100 //iota +=1
g //100 iota +=1
h = iota //7,恢复计数
i //8
)
通过上面的示例我们可以看到,常量的值由于在中间有特殊的赋值,因此不是连续自增的。但是 itoa的值是一直增1的。因此当 h 再次使用itoa的时候,它的值是 7 而不是 3。