Go 常量与运算符

常量

定义

  • 常量的值在编译时就已经确定
  • 常量的定义格式与变量基本相同
  • 等号右侧必须是常量或者常量表达式
  • 常量表达式中的函数必须是内置函数
1
2
3
4
5
6
7
8
9
10
11
12
onst a int = 1
const b = 'A'
const (
text = "123"
length = len(text)
num = b * 20
)

const i, j, k = 1, "2", '3'
const (
text2, length2, num2 = "456", len(text2), k * 10
)

初始化规则与枚举

  • 在定义常量时,如果不提供初始值,则表示将使用上行的表达式
  • 使用相同的表达式不代表具有相同的值
  • iota 是常量的计数器,从 0 开始,组中每定义1个常量自动递增1
  • 通过初始化规则与 iota 可以达到枚举的效果
  • 每遇得到一个 const 关键字, iota 就会重置为 0
1
2
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
28
29
30
const (
// a 和 b 都为 “A"
a = "A"
b
c = iota
// d 的值为 3
d
)

const (
e = iota
// f 的值为 1
f
)

// 星期枚举
const (
Monday = iota
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
)

// 输出结果
A A 2 3
0 1
0 1 2 3 4 5 6

一般来说,在文件内中的常量尽量大写

1
2
3
4
5
const MAX_COUNT = 1000
// 如果不想给包外使用,根据可见性规则,可以改为
const _MAX_COUNT = 1000
// 或者
const cMAX_COUNT = 1000

iota

iota是表示无类型整数序数的预先声明的标识符,它是零索引的,Untyped int.

运算符

Go 中的运算符均是从左至右结合

优先级由高到低

运算符
一元 ^!
二元 */%<<>>&&^
+-、` ^`
==!=<<=>>=
专门用于并发的 channel <-
&&、` `

一元运算符

参与计算的数字只有一个

1
2
3
4
5
6
fmt.Println(^2)
fmt.Println(!true)

// 结果
-3
false

二元运算符

参与计算的数字有2个

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
5 0101
12 1100
--------------
& 0100 -> 4
| 1101 -> 13
^ 1001 -> 9
&^ 0001 -> 1
*/
func main() {
a := 5
b := 12
fmt.Println(a & b)
fmt.Println(a | b)
fmt.Println(a ^ b)
fmt.Println(a &^ b)
}

枚举与 iota

常量的 iota 与 << 运算符实现计算机存储单位的枚举

1
2
3
4
5
6
7
const (
B float64 = 1 << (iota * 10)
KB
MB
GB
TB
)

第一个常量中的iota为0,之后的KB会将上面的公式带入,不同时 iota 此时进行了 + 1 操作

- the End -
0%