const常量

常量定义

常量是在go运行过程中不会被修改的量,常量数据类型只支持bool类型、数字类型、字符串类型
定义格式如下:

// const identifier [type] = value
const a string = "abc" // 显式定义
const a = "abc" // 隐式定义

定义多个同类型的变量

const a, b string = "abc", "def"
const a, b = "abc", "def"

枚举

常量还可以用作枚举

const (
    Monday    = 0
    Tuesday   = 1
    Wednesday = 2
    Thurday   = 3
    Friday    = 4
    Saturday  = 5
    Sonday    = 6
)

内置函数

常量可以用lenunsafe.Sizeof等函数计算表达式的值。常量表达式中,函数必须是内置函数,否则编译过不了。

const (
    a = "123"
    b = len(a)
    c = unsafe.Sizeof(a)
)

iota

iotago语言的常量计数器,只能在const变量中使用,特性如下。

1、每次const出现,都会使iota初始化为0
const (
    a = iota // 0
)
const (
    b = iota // 0
    c        // 1
)
2、自定义类型
type NewInt int

const (
    a NewInt = iota // 0
    b        = iota // 1
    c               // 2
)
3、可跳过的值
const (
    a int = iota // 0
    b     = iota // 1
    _
    _
    c // 4
)
4、位掩码表达式
const (
    a NewInt = 1 << iota // 0
    b                    // 2
    _
    _
    c // 16
)
5、定义数量级
const (
    _           = iota             // ignore first value by assigning to blank identifier
    KB ByteSize = 1 << (10 * iota) // 1 << (10*1)
    MB                             // 1 << (10*2)
    GB                             // 1 << (10*3)
    TB                             // 1 << (10*4)
    PB                             // 1 << (10*5)
    EB                             // 1 << (10*6)
    ZB                             // 1 << (10*7)
    YB                             // 1 << (10*8)
)
6、中间插队

中间插队时,iota会被覆盖掉不再继续自增

    const (
        a = iota //0
        b        //1
        c        //2
        d = "ha" //独立值,iota += 1
        e        //"ha"   iota += 1
        f = 100  //iota +=1
        g        //100  iota +=1
        h = iota //7,恢复计数
        i        //8
    )
7、中间插队

iota在下一行增长,同一行常量继续增长

const (
    Apple, Banana     = iota + 1, iota + 2 // 1,2  iota++, iota++
    Cherimoya, Durian                      // 2,3  iota++
    Elderberry, Fig                        // 3,4  iota++
    Elderber, Figf                         // 4,5  iota++
)

优点:使用iota能简化定义,在定义枚举时很有用。当代码需要改动的时候,也比较易于拓展或者修改;
缺点:不熟悉iota的规则很容易理解错;

参考文档

  • https://www.cnblogs.com/mingbai/p/goConstItoa.html
  • https://www.runoob.com/go/go-constants.html

你可能感兴趣的:(const常量)