胡文成的个人博客

Go常量的声明与使用

2024-08-21

一、常量相关概念

1、常量概念

常量,是一些表达式

2、特点
  • 常量的值能够被编译器感知到,常量值的计算一定发生在编译时期,而不是运行时期

  • 每一个常量的底层数据类型一定是某个基本类型:boolean类型、string类型或数值类型

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    // 常量的值为字符串
    const (
    COMMA = ","
    DOT = "."
    SEMICOLON = ";"
    )

    // 常量的值为布尔值
    const (
    SUCCESS = true
    FAILED = false
    )

    // 常量的值为数字
    const (
    CNY = iota
    USD
    EUR
    )
被编译器感知的好处
  • 操作数是常量的运算,提前到了编译器,不仅可以做编译优化,还能提升运行时的性能

  • 如果表达式的操作数是常量,那么一些运行时的错误就可以提前在编译器被发现

    比如:除数为0字符串索引越界浮点数计算导致的正负无穷等等

2、使用
  • 对两个常量值进行算术、逻辑和比较操作,得到的结果仍然是常量,即使对结果进行强制转换,或者调用内置函数(比如:lencaprealimagcomplexunsafe.Sizeof)

  • 常量表达式可以作为复杂数据类型的一部分,比如数组类型的长度

    比如:要定义一个IPv4地址

    1
    2
    3
    4
    5
    const IPv4Len = 4

    func parseIPv4(s string) IP {
    // 函数体
    }

二、常量的声明

1、使用const声明
1
2
const PI = 3.1415926
const e = 2.718
1)批量形式的常量声明与初始化
1
2
3
4
const (
PI = 3.1415926
e = 2.718
)
2)特殊形式的声明与初始化
1
2
3
4
5
const (
n1 = 100
n2
n3
)

说明:这里go会将n2n3同时赋值100

2、常量生成器iota的使用
1)功能:const语句块里的行索引

将const第一个出现的iota重置为0,然后在const中每新增一行常量声明,iota将重新计数一次

2)典型例子
1
2
3
4
5
6
const (
a1 = iota // 0
a2 // 1
a3 // 2
a4 // 3
)
1
2
3
4
5
6
const (
b1 = iota // 0
_ = iota // 1
b3 = iota // 2
b4 = iota // 3
)
1
2
3
4
5
6
const (
c1 = iota // 0
c2 = 100
c3 // 2
c4 // 3
)
1
2
3
4
const (
d1,d2 = iota+1,iota+2 // d1=1, d2=2
d3,d4 = iota+1,iota+2 // d3=2, d4=3
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/*日常网盘单位声明*/
const (
B = 1
KB = 1000 * 1000
MB = 1000 * 1000 * 1000
GB = 1000 * 1000 * 1000 * 1000
TB = 1000 * 1000 * 1000 * 1000 * 1000
PB = 1000 * 1000 * 1000 * 1000 * 1000 * 1000
)

/*计算机单位声明*/
const (
_ = iota
KiB = 1 << (10 * iota)
MiB = 1 << (10 * iota)
GiB = 1 << (10 * iota)
TiB = 1 << (10 * iota)
)
Tags: golang

扫描二维码,分享此文章