Golang |常量

常量

定义

常量是一个简单值的标识符,在程序运行时,不会被修改的量。常量使用一个名称来绑定一块内存地址,该内存地址中存放的数据类型由定义常量时指定的类型来决定,并且该内存地址里面存放的值是不可以被改变的,


Go语言中的常量分为:布尔型字符串类型数值型
常量一般存储在程序的只读段里。

字面常量

字面常量通常指的是程序中硬编码的常量:

如:
66 数值常量
3.1415926 浮点型常量
1.8 + 66i 复数类型的常量
true 布尔类型常量
"cat" 字符串常量

字面常量在Go语言程序中是无类型的,只要这个常量在相应类型的值域范围内,就可以做为该类型的常量。比如:66 就可以赋值给 :intuintint32int64float32float64complex64complex128等。

常量的定义

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语言里面预定义了一些常量,如:truefalseiota
其中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
)

上面是一个星期的枚举类型的定义。



细节决定成败!
个人愚见,如有不对,恳请斧正!

上一篇:Go 初识


下一篇:Go语言变量和常量