# 常量
常量是一个简单值的标识符,在程序运行时,不会被修改的量。 常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。
常量的定义格式:const identifier [type] = value
# 在函数内部定义常量
// 常量定义在函数内部
func consts() {
const fileName = "abc.txt"
const a, b = 3, 4
var c int
// 注:这里因为const 声明a,b的时候并未指明数据类型,所以如下的时候可以不用强制数据类型转换
c = int(math.Sqrt(a*a + b*b))
fmt.Println("函数内部常量", fileName, c) //函数内部常量 abc.txt 5
}
# 定义全局常量
//常量定义在函数外部
const fileName = "abcd.txt"
const a, b = 3, 4
func consts() {
c := int(math.Sqrt(a*a + b*b))
fmt.Println("函数外部常量", fileName, c) // 函数外部常量 abcd.txt 5
}
# 简写
如果同时定义多个常量,可以简写为以下形式
const fileName = "abcd.txt"
const a, b = 3, 4
// 等价于
const (
fileName = "abc.txt"
d, f = 3, 4
)
# 枚举
一个一个列举
// 枚举
func enums() {
const (
cpp = 0
java = 1
python = 2
golang = 3
)
fmt.Println(cpp, java, python, golang) // 0 1 2 3
}
# iota
类似于连续自增的的这种,go提供了一种简介的形式来写: iota 是一个常量计数器,(注意它的对象必须是个常量),当你给一个常量赋值为 iota 时,从当前行开始,随着逐行往下,iota也会逐渐 +1
func enums2() {
const (
cpp = iota
java
python
golang
)
fmt.Println(cpp, java, python, golang) //0 1 2 3
}
# 跳过一个值
func enums3() {
const (
cpp = iota
_
java
python
golang
)
fmt.Println(cpp, java, python, golang) //0 2 3 4
# 作为一个自增值的种子参与运算
unc enums4() {
const (
b = 1 << (10 * iota)
kb
mb
gb
tb
pb
)
fmt.Println(b, kb, mb, gb, tb, pb) //1 1024 1048576 1073741824 1099511627776 1125899906842624
}
# 常用示例
// 批量声明常量时,如果某一行声明, 默认就和上一行一致
const (
n1 = 100 // 100
n2 // 100
n3 // 100
)
// iota
const (
a1 = iota // 0
a2 // 1
a3 // 2
)
const (
b1 = iota // 0
b2 // 1
_ // 2
b3 // 3
)
const (
c1 = iota // 0
c2 = 100 // 100
c3 = iota // 2
c4
)
const (
d1, d2 = iota + 1, iota + 2 // d1 = 1, d2 = 2
d3, d4 = iota + 1, iota + 2 // d2 = 2, d4 = 3
)
// 定义数量级
const (
_ = iota
KB = 1 << (10 * iota) // 1024
MB = 1 << (10 * iota)
GB = 1 << (10 * iota)
TB = 1 << (10 * iota)
PB = 1 << (10 * iota)
)