GoLang

常量

如何在 golang 中定义一个常量

BoYang
2022-03-17
3 min

# 常量

常量是一个简单值的标识符,在程序运行时,不会被修改的量。 常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。

常量的定义格式:const identifier [type] = value

# 在函数内部定义常量

// 常量定义在函数内部
func consts() {
    const fileName = "abc.txt"
    const a, b = 3, 4
    var c int
    // 注:这里因为const 声明a,b的时候并未指明数据类型,所以如下的时候可以不用强制数据类型转换
    c = int(math.Sqrt(a*a + b*b))
    fmt.Println("函数内部常量", fileName, c) //函数内部常量 abc.txt 5
}

# 定义全局常量

//常量定义在函数外部
const fileName = "abcd.txt"
const a, b = 3, 4

func consts() {
    c := int(math.Sqrt(a*a + b*b))
    fmt.Println("函数外部常量", fileName, c) // 函数外部常量 abcd.txt 5
}

# 简写

如果同时定义多个常量,可以简写为以下形式

const fileName = "abcd.txt"
const a, b = 3, 4

// 等价于
const (
    fileName = "abc.txt"
    d, f     = 3, 4
)

# 枚举

一个一个列举

// 枚举
func enums() {
    const (
        cpp    = 0
        java   = 1
        python = 2
        golang = 3
    )
    fmt.Println(cpp, java, python, golang) // 0 1 2 3
}

# iota

类似于连续自增的的这种,go提供了一种简介的形式来写: iota 是一个常量计数器,(注意它的对象必须是个常量),当你给一个常量赋值为 iota 时,从当前行开始,随着逐行往下,iota也会逐渐 +1

func enums2() {
    const (
        cpp = iota
        java
        python
        golang
    )
    fmt.Println(cpp, java, python, golang) //0 1 2 3
}

# 跳过一个值

func enums3() {
    const (
        cpp = iota
        _
        java
        python
        golang
    )
    fmt.Println(cpp, java, python, golang) //0 2 3 4

# 作为一个自增值的种子参与运算

unc enums4() {
    const (
        b = 1 << (10 * iota)
        kb
        mb
        gb
        tb
        pb
    )
    fmt.Println(b, kb, mb, gb, tb, pb) //1 1024 1048576 1073741824 1099511627776 1125899906842624
}

# 常用示例

// 批量声明常量时,如果某一行声明, 默认就和上一行一致
const (
    n1 = 100        // 100
    n2              // 100
    n3              // 100
)

// iota
const (
    a1 = iota       // 0
    a2              // 1
    a3              // 2
)
const (
    b1 = iota       // 0
    b2              // 1
    _               // 2
    b3              // 3
)

const (
    c1 = iota       // 0
    c2 = 100        // 100
    c3 = iota       // 2
    c4
)

const (
    d1, d2 = iota + 1, iota + 2     // d1 = 1, d2 = 2
    d3, d4 = iota + 1, iota + 2     // d2 = 2, d4 = 3
)

// 定义数量级
const (
    _ = iota
    KB = 1 << (10 * iota)       // 1024
    MB = 1 << (10 * iota)
    GB = 1 << (10 * iota)
    TB = 1 << (10 * iota)
    PB = 1 << (10 * iota)
)