学习go语言编程之常量

发布时间 2023-08-12 22:34:07作者: nuccch

什么在常量

在Golang中,常量是指在编译期就已知且不可改变的值。

字面常量

在程序中硬编码的常量值被称为字面常量,如:

-12       // 整数类型常量
3.1415926 // 浮点类型常量
3.2+12i   // 复数类型常量
true      // 布尔类型常量
"foo"     // 字符串常量

常量定义

使用关键字const给常量指定一个友好的名字:

const pi float64 = 3.1415926 // 限定类型的常量
const zero = 0.0             // 无类型浮点常量

Golang中的常量定义可以限定类型,但不是必须的。如果定义常量时没有指定类型,那么它与字面常量一样,是无类型常量。

还可以同声明多个常量:

const {
    size int64 = 1024
    eof = -1
}

还可以进行常量的多重赋值:

const u, v float32 = 0, 3   // 常量的多重赋值,u = 0.0, v = 3.0
const a, b, c = 3, 4, "foo" // a = 3, b = 4, c = "foo"

常量的值也可以是一个在编译期运算的常量表达式:

const mask = 1 <<< 3 // mask = 8

但不能是在运行期才能得出结果的值,如下常量定义将编译报错。

const home = os.GetEnv("HOME")

预定义常量

Golang中预定义了这些常量:truefalseiota
iota很特殊,可以认为是一个可被编译器修改的常量:在每一个const关键字出现时被重置为0,然后在下一次const出现之前,每出现一次iota,其所代表的数字会自动加1。

const {
    c0 = iota // c0 = 0
    c1 = iota // c1 = 1
    c2 = iota // c2 = 2
}

const {
    a = 1 << iota // a = 1,iota所代表的数字被重置为0
    b = 1 << iota // b = 2
    c = 1 << iota // c = 4
}

const {
    u = iota * 42 // u = 0,iota所代表的数字被重置为0
    v = iota * 42 // v = 42
    w = iota * 42 // 84
}

const x = iota   // x = 0,iota所代表的数字被重置为0
const y = iota   // y = 0,iota所代表的数字被重置为0

枚举

const关键字后使用一对圆括号的方式定义一组常量,这组常量就是Golang中的枚举。

const (
    Sunday = iota
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
    numberOfDays // 小写字母开头,这个常量没有导出,属于包私有的,只能在包内可见
)

只有以大写字母开头的枚举值对其他包可见,以小写字母开头的枚举值只能在包内可见。