常量的定义
- 常量的值在编译时就已经确定  
- 常量的定义格式与变量基本相同  
- 等号右侧必须是常量或者常量表达式
- 常量表达式中的函数必须是内置函数
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 
 | package main
 import "fmt"
 
 
 const a int = 1
 const b = 'B'
 const (
 text = "123"
 length = len(text)
 num = b * 20
 )
 
 
 const i, j, k = 1, "2", '3'
 const (
 text2, length2, num2 = "468", len(text2), k * 10
 )
 
 func main()  {
 fmt.Println(a, b, text, length, num)
 fmt.Println(i, j, k, text2, length2, num2)
 }
 
 输出:
 1 66 123 3 1320
 1 2 51 468 3 510
 
 | 
常量的初始化规则与枚举
- 在定义常量组时,如果不提供初始值,则表示将使用上行的表达式
- 使用相同的表达式不代表具有相同的值
- iota是常量的计数器,从0开始,组中每定义1个常量自动递增1
- 通过初始化规则与iota可以达到枚举的效果
- 每遇到一个const关键字,iota就会重置为0
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 
 | const (
 
 a = 'A'
 b
 
 c = iota
 d = iota
 e
 )
 
 | 
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 
 | const (
 
 Sunday
 Monday = iota
 Tuesday
 Wednesday
 Thursday
 Friday
 Saturday
 )
 
 
 const (
 
 Sunday = iota
 Monday
 Tuesday
 Wednesday
 Thursday
 Friday
 Saturday
 )
 
 | 
运算符
Go中的运算符均是从左至右结合
优先级(从高到低)
| 12
 3
 4
 5
 6
 7
 
 | ^     !                                          (一元运算符)*     /    %    <<    >>    &      &^            (一元运算符)
 +     -    |    ^                                (二元运算符)
 ==    !=   <    <=    >=    >                    (二元运算符)
 <-                                               (专门用于channel)
 &&
 ||
 
 | 
思考问题
请尝试结合常量的iota与<<运算符实现计算机储存单位的枚举?
从小到大的存储单位主要利用移位操作,我们可以利用常量引用上一个常量的iota表达式来实现移位操作
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 
 | package main
 import "fmt"
 
 const (
 _ = iota
 KB float64 = 1 << (iota * 10)
 MB
 GB
 TB
 PB
 )
 
 func main()  {
 fmt.Println(KB, MB, GB, TB, PB)
 }
 
 输出:
 1024 1.048576e+06 1.073741824e+09 1.099511627776e+12 1.125899906842624e+15
 
 |