常量就是在整个程序中,一个变量的值始终不能被改变或者再次声明。
golang 中使用 const 关键字声明一个常量。
const pi = 3.1415926
const (
codeOk int = 200
conde404 = 404
)
当声明常量时,若果后面的常量没有指定具体的值,就会继承上一个常量的值。
package main
import "fmt"
const (
a = "hello" // a -> hello
b // b -> hello
)
func main(){
fmt.Println(a,b)
}
iota 是常量的计数器,也是一个 go 中的关键字。
iota 必须和 const 配合使用。
iota 在每一个 const 中第一次出现时,iota 的值是 0 ,之后在同一个 const 中只要每声明一行常量,iota 的值就会被递增 1。
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
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是同一个道理。
const(
b1 = iota // 0
_ // 1
b3 // 2
)
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
)
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
)
iota 是一个常量中的关键字
其值在 const 中第一次出现的时候是 0
之后,在 const 代码块儿中只要每成功声明一行常量,iost 的值就会加 1
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 次方
)