第二章 变量、常量和数据类型 (2)

数值变量也可以支持++递增和--递减语句。注意它是语句,不是表达式,所以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可以赋值给intuintint32int64float32float64complex64complex128等类型的变量。

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语言预定义的常量有:truefalseiota,其中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

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpsfxs.html