常量
定义
常量
是一个简单值的标识符,在程序运行时,不会被修改的量。常量使用一个名称来绑定一块内存地址,该内存地址中存放的数据类型由定义常量时指定的类型来决定,并且该内存地址里面存放的值是不可以被改变的,
Go语言中的常量分为:布尔型
、字符串类型
、数值型
。
常量一般存储在程序的只读段里。
字面常量
字面常量通常指的是程序中硬编码的常量:
如:
66 数值常量
3.1415926 浮点型常量
1.8 + 66i 复数类型的常量
true 布尔类型常量
"cat" 字符串常量
字面常量在Go语言程序中是无类型的,只要这个常量在相应类型的值域范围内,就可以做为该类型的常量。比如:66 就可以赋值给 :int
、uint
、int32
、int64
、float32
、float64
、complex64
、complex128
等。
常量的定义
Go语言的常量的定义可以限定常量类型,但是也可以不用,它和变量一样,如果定义的时候,没有指定类型,那么程序运行中,会概把字面常量把常量的类型给推导出来。
显式类型定义
显示定义常量,就是把常量的类型写出来。
const PATH string = "http://www.baidu.com" //定义一个百度网址常量字符串
const PI float64 = "3.1415926" //定义一个圆周率的常量
隐式类型定义
隐式写义常量就是定义的时候不写类型。
const NAME = "张三" //不写变量的类型
const SIZE = 1024
Go语言的常量可以定义的时候,右值也可以是一个编译期的运算的常量表式。如:
const num = 2 << 2
这是因为常量的赋值是在编译期进行的,所以可以出现也是编译期运行的常量的表达式,但是如果是编译期值还在变动的是不行的。
批量定义常量
如果我们在定义十多个常量的时候还每一个常量都写一个const
的话,那效率真的是太慢了。所以我们有下面的办法批量定义常量。
const(
a = 1
b = 2
c = 3
)
根据上面的方法,我们可以批量的定义一组常量,并且还好管理,我们可以把同一类型的常量定义到一个const里面,这样可以使得代码更加的清晰。
预定义常量
Go语言里面预定义了一些常量,如:true
、false
、iota
其中iota
比较特殊,它可以被认为是一个可以被预编译的常量,在每一个const
关键字出现的时候被重置为0,然后在下一个const
出现之前,每出现一次iota
,其所代表的数字都会自动增加1。
//我们一般结合着const()来使用iota
//如些上面的代码就可以改为
const(
a = iota //0
b = iota //1
c = iota //2
)
这和上面的代码的效果是一样的。
也可以这样写:
const(
a = iota //0
b //1
c //2
)
这样可以更加的简单一点,并且这样是因为,Go语言里面如果一组常量里面,如果某个常量 没有初始值,那么默认和上一行一致。
我们还可以在这里面运用表达式。
const(
a = 1 << iota //0
b //2
c //4
)
枚举
在Go语言
没有专门来定义枚举类型
的关键字,所以我们用枚举类型
的时候,都是用常量
来定义的。例:
const(
MONDAY = 1 + iota
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY
)
上面是一个星期的枚举类型的定义。
细节决定成败!
个人愚见,如有不对,恳请斧正!