常量的定义
-
常量的值在编译时就已经确定
-
常量的定义格式与变量基本相同
-
等号右侧必须是常量或者常量的表达式
-
常量表达式中的函数必须是内置函数
//定义单个常量
const 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关键字,icta就会重置为0
const(
//a与b都为"A"
a = "A"
b
c = iota
d //d的值为1
)
const(
e = iota
f = //f的值为1
)
//星期枚举
const(
//第一个常量不可省略表达式
Monday = iota
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
)
计算机的存储单位
const (
B float64 = 1 << (iota * 10)
KB
MB
GB
)
func main() {
fmt.Println(GB)
for i := 1; i <= 5; i++ {
fmt.Println(1 << (i * 10))
}
}
运行结果:
运算符
-
Go中的运算符均是从左至右结合
优先级(从高到低)
-
^ ! (一元运算符)
-
* / % << >> & &^
- + - | ^ (二元运算符)
-
== != < <= >= >
-
<- (专门用于channel)
-
&&
-
||
/*
下面是模拟6和11的二进制操作原理
6 : 0110
11: 1011
------------
& 0010 = 2
| 1111 = 15
^ 1101 = 13
&^ 0100 = 4
*/
func main() {
fmt.Println(6 & 11)
fmt.Println(6 | 11)
fmt.Println(6 ^ 11)
fmt.Println(6 &^ 11)
}
运行结果: