Go语言常量(const)的使用
Go语言中的常量使用关键字 const 定义,用于存储不会改变的数据,常量是在编译时被创建的,即使定义在函数内部也是如此,并且只能是布尔型、数值型(整型、浮点型和复数类型)和字符串型。
由于编译时的限制,定义常量的表达式必须为能被编译器求值的常量表达式。
Go语言中常量的定义包括显式定义和隐式定义两种:
Go语言的常量还可以是十进制、八进制或十六进制的常数。
另外,整数还可以有一个后缀,其后缀可以是大小写字母(顺序任意)。后缀通常是 U 和 L 的组合,通常用于表示 unsigned 和 long,例如:
当操作数是常量时,运行时经常出现的错误也可以在编译时被发现,例如,整数除零、字符串索引越界、任何导致无效浮点数的操作等。
常量间的所有算术运算、逻辑运算和比较运算的结果也是常量,对常量的类型转换操作或函数调用(len、cap、real、imag、complex 和 unsafe.Sizeof)都是返回常量结果。
由于常量的值是在编译期就确定的,因此常量可以用于数组的声明。
如果省略初始化表达式,则表示使用前面常量的初始化表达式,对应的常量类型也是一样的,例如:
iota 在 const 关键字出现时将被重置为 0,const 中每新增一行常量声明将使 iota 计数一次。
iota 可以被用作枚举值,例如:
由于编译时的限制,定义常量的表达式必须为能被编译器求值的常量表达式。
Go语言常量的定义
常量是在程序运行时不会被修改的量。常量的定义格式如下:const identifier [type] = value
例如:const Pi = 3.1415926 //可以指定常量的类型 const Pi float32=3.1415926 //也可以是布尔值、字符串等 const hello="Go语言" //还可以使用中文在Go语言中,由于编译器可以根据变量的值来推断其类型,因此可以省略类型说明符 [type]。
Go语言中常量的定义包括显式定义和隐式定义两种:
-
显式定义如下:
const a string = "apple"
-
隐式定义如下:
const a = "apple"
Go语言的常量还可以是十进制、八进制或十六进制的常数。
- 十进制无前缀
- 前缀为 0 的是八进制
- 前缀为 0x 或 0X 的是十六进制
另外,整数还可以有一个后缀,其后缀可以是大小写字母(顺序任意)。后缀通常是 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 )