一、const
1 常量介绍
常量就是在整个程序中,一个变量的值始终不能被改变或者再次声明。
golang 中使用 const 关键字声明一个常量。
2 声明单个常量
const pi = 3.1415926
3 声明多个常量
const (
codeOk int = 200
conde404 = 404
)
4 值的继承
当声明常量时,若果后面的常量没有指定具体的值,就会继承上一个常量的值。
package main
import "fmt"
const (
a = "hello" // a -> hello
b // b -> hello
)
func main(){
fmt.Println(a,b)
}
二、iota
1 介绍
iota 是常量的计数器,也是一个 go 中的关键字。
iota 必须和 const 配合使用。
iota 在每一个 const 中第一次出现时,iota 的值是 0 ,之后在同一个 const 中只要每声明一行常量,iota 的值就会被递增 1。
2 声明单个
package main
import "fmt"
const h = iota
func main(){
fmt.Println(h) // h -> 0
}
代码解读:
const h = iota
表示把 iota 的值赋值给了 h 这个常量,那 h 的值也就是 iota 的值
const 中第一次出现了 iota ,此时 iota 的值是 0
3 声明多个
const(
a1 = iota // 0
a2 // 1
a3 // 2
)
代码解读:
a1 = iota
表示把 iota 的值赋值给了 h 这个常量,那 h 的值也就是 iota 的值, 此时 iota 由于是这个 const 代码块中第一次出现,因此其值是 0,那a1
的值也是 0。a2
在 const 中a2
没有指定具体的值,其值就会继承上一行常量的值,上一行常量a1
的值是 iota, 但此时a2
已经是这个 const 代码块中的第二行声明一个常量了,iota 的值就会递增,也就是 1,因此a2
的值也是 1。a3
和a2
是同一个道理。
4 可以使用 _ 来接收那些希望跳过递增的数值
const(
b1 = iota // 0
_ // 1
b3 // 2
)
5 可以和普通的常量混合使用
const(
c1 = iota // iota -> 0, c1 -> 0
c2 // iota -> 1, c2 -> 1
c3 = 10 // iota -> 2, c3 -> 10
c4 // c4 的值是 10,iota 的值 3
_ // _ 的值是 10,iota 的值 4
c5 // c5 的值是 10,iota 的值 5
c6 = iota // 此时 c6 的值被赋值为 iota, 而此时 iota 的值是 6,所以 c6的值也是 6
c7 // 同理 c7
)
6 iota 如果出现在同一行,iota 的值不会递增
const(
d1,d2 = iota,iota + 1 // iota -> 0, d1 -> 0 d2 -> 1
d3 = 10 // iota -> 1, d3 -> 10
d4,d5 = 4,iota // iota -> 2, d4 -> 4
)
7 iota 总结
iota 是一个常量中的关键字
其值在 const 中第一次出现的时候是 0
之后,在 const 代码块儿中只要每成功声明一行常量,iost 的值就会加 1
8 生产示例
const(
_ = iota
KB = 1 << (10 * iota) // 1 << 10 * 1 就是 2 的 10 次方
MB = 1 << (10 * iota) // 1 << 10 * 2 就是 2 的 20 次方
GB = 1 << (10 * iota) // 1 << 10 * 2 就是 2 的 30 次方
TB = 1 << (10 * iota) // 1 << 10 * 2 就是 2 的 40 次方
PB = 1 << (10 * iota) // 1 << 10 * 2 就是 2 的 50 次方
)