数值变量也可以支持++递增和--递减语句。注意它是语句,不是表达式,所以x=i++这样的表达式是错误的。
3多重赋值
多重赋值允许同时更新多个变量的值。在赋值之前,赋值语句右边的所有表达式会先进行求值,然后再统一更新左边对应的变量的值。这样在做两个数值交换时,不需要引入第三个变量了。
x,y=y,x
4 _标识符
有些表达式会产生多个值,例如调用一个有多个返回值的函数。可以使用下划线空白标识符_来丢弃不需要的值。
_, err := io.Copy(dst, src)//丢弃字节数
2.2 常量
在Go语言中,常量是指编译期间就已知且不可改变的值。常量的潜在类型都是基础类型,包括整型、浮点型、复数型、布尔类型和字符串类型等。
2.2.1 字面常量所谓字面常量,是指程序中硬编码的常量,如:
25
3.14159
2+3i
true
"hello"
在其它语言中,常量通常有特定的类型,Go语言的字面常量是无类型的。只要这个常量在相应类型的值域范围内,就可以作为该类型的常量。例如,25可以赋值给int、 uint、int32、int64、float32、float64、complex64、complex128等类型的变量。
2.2.2 常量声明使用const来声明常量,可以给常量一个友好的名字例如:
const pi = 3.1415926
也可以批量声明:
const (
e = 2.7182818
pi = 3.1415926
)
一个常量的声明也可以限定类型,但不是必需的。如果没有显示指定类型,那么它与字面量一样,是无类型常量。常量定义的右值也可以是一个在编译期运算的常量表达式,例如:
const i = 1 << 3 //右值是常量表达式
如果是批量声明的常量,除第一个外其它的常量的右边的初始化表达式都可以省略,默认使用前面常量的初始化表达式写法。例如:
const (
a = 1
b
c = 2
d
e
)
fmt.Println(a, b, c, d, e)
打印结果:1 1 2 2 2
2.2.3 iota常量生成器
Go语言预定义的常量有:true、false和iota,其中iota比较特殊。常量声明可以使用iota常量生成器初始化,它用于生成一组以相似规则初始化的常量,但是不用每行都写一遍初始化表达式。在一个const声明语句中,在第一个声明的常量所在的行,iota将会被置为0,然后在每一个有常量声明的行加一。下面是来自time包的例子。这种定义法在Go语言中通常用于定义枚举值。
type weekday int
const(
Sunday weekday iota //0
Monday //1
Tuesday //2
Wednesday //3
Thursday //4
Friday //5
Saturday //6
)
我们也可以在复杂的常量表达式中使用iota,例如下面每个常量都是1024的幂。
const (
_ = 1 << (10 * iota)
KiB
MiB
GiB
TiB
)
fmt.Println(KiB, MiB, GiB, TiB)
打印结果:1024 1048576 1073741824 1099511627776