Golang 常量

125 阅读2分钟

常量

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

常量的定义

const  Name  [type]  =  value

Const  v_name_1, v_name_2  =  v_value_1, v_value_2

常量的值可以用内置函数计算表达式的值,函数必须为内置函数

Const (
    A = "abs"
    B = len(A)
    c = unsafe.Sizeof(A)
)

iota

iota 特殊常量,可以认为是一个可以被编译器修改的常量 iota 在 const 关键字出现时将被重置为 0 (const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块的行索引)

Const (
    a = iota
    b = iota
    c = iota
)  

// 或者

Const (
    a = iota
    b
    c
)  

ps:
第一个 iota 值为 0,在使用关键字 const 时被赋值为 0;在常量 a 被定义时,a 获取到的 iota0, 同时 iota 被赋值为 1

第二个 iota 值为 1,
当常量没有赋值时,使用上一个常量的值(上一个的赋值表达式),且 iota 自增 +1;
当常量为独立赋值 且 不是 iota 时,使用独立赋值,且 iota 自增 +1; 
当常量赋值为 iota 时,常量获取 iota 的计数值,此时 b 获取到的 iota 值 为 1,同时 iota 被赋值为 2

第三个 值为 2,同时 iota 被赋值为 3
Const (
    A = iota  // 0
    B         // 1
    c         // 2
    D = "ha"  // 独立值,"ha",iota += 1
    E         // "ha",iota += 1
    F = 100   // 独立值,100,iota += 1
    g         // 100,iota += 1
    h         // 100,iota += 1
    I = iota  // 重新使用iota赋值,8,iota += 1
    j         // 9
)
Const (
    A = 1 << iota   // 独立值,1 << 0,值为 1,iota += 1
    b = 3 << iota   // 独立值,3 << 1,值为 6,iota += 1
    c               // 使用上一个值的赋值表达式,3 << 2,值为 12,iota += 1
    d               // 使用上一个值的赋值表达式,3 << 3,值为 24,iota += 1
)