首页 > 编程笔记

Go语言常量(const)的使用

Go语言中的常量使用关键字 const 定义,用于存储不会改变的数据,常量是在编译时被创建的,即使定义在函数内部也是如此,并且只能是布尔型、数值型(整型、浮点型和复数类型)和字符串型。

由于编译时的限制,定义常量的表达式必须为能被编译器求值的常量表达式。

Go语言常量的定义

常量是在程序运行时不会被修改的量。常量的定义格式如下:

const identifier [type] = value

例如:
const Pi = 3.1415926        //可以指定常量的类型
const Pi float32=3.1415926  //也可以是布尔值、字符串等
const hello="Go语言"        //还可以使用中文
在Go语言中,由于编译器可以根据变量的值来推断其类型,因此可以省略类型说明符 [type]。

Go语言中常量的定义包括显式定义和隐式定义两种:
Go语言的常量还可以是十进制、八进制或十六进制的常数。
另外,整数还可以有一个后缀,其后缀可以是大小写字母(顺序任意)。后缀通常是 U 和 L 的组合,通常用于表示 unsigned 和 long,例如:
3.1415926  //十进制,合法
0215       //八进制,合法
0x25       //十六进制,合法
30u        //无符号整型,合法
25l        //long,合法
25ul       //无符号long,合法

Go语言常量的声明

常量的声明和变量的声明类似,只是把 var 换成了 const。多个变量可以一起声明,同样,多个常量也可以一起声明,例如:
const (
    e = 2.7182
    pi = 3.1415
)
在Go语言中,所有常量的运算都可以在编译期来完成,这样不仅可以减少运行时的工作,也方便其他代码的编译优化。

当操作数是常量时,运行时经常出现的错误也可以在编译时被发现,例如,整数除零、字符串索引越界、任何导致无效浮点数的操作等。

常量间的所有算术运算、逻辑运算和比较运算的结果也是常量,对常量的类型转换操作或函数调用(len、cap、real、imag、complex 和 unsafe.Sizeof)都是返回常量结果。

由于常量的值是在编译期就确定的,因此常量可以用于数组的声明。
const size =5
var arr [size] int
如果是批量声明的常量,除了第一个常量外,其他的常量右边的初始化表达式都可以省略。

如果省略初始化表达式,则表示使用前面常量的初始化表达式,对应的常量类型也是一样的,例如:
const (
    a = 3
    b
    c = 5
    d
)
fmt.Println(a, b, c, d) //"3 3 5 5"

iota

在Go语言中有一个特殊的常量—— iota。iota 是一个可以被编译器修改的常量。

iota 在 const 关键字出现时将被重置为 0,const 中每新增一行常量声明将使 iota 计数一次。

iota 可以被用作枚举值,例如:
const (
    a = iota
    b = iota
    c = iota
)
第一个 iota 等于 0,每当 iota 在新的一行被使用时,它的值都会自动加 1;所以 a=0, b=1, c=2 可以简写为如下形式:
const (
    a = iota
    b
    c
)

推荐阅读