Go语言编程(五)之常量

来源:互联网 发布:文本语音朗读软件 编辑:程序博客网 时间:2024/04/28 04:39

   在Go语言中,常量是指编译期间就已知且不可改变的值。常量可以是数值类型(包括整型、浮点型和复数类型)、布尔类型、字符串类型等。

字面常量

是指程序中硬编码的常量。Go语言的字面常量是无类型的。只要这个常量在相应类型的值域范围内,就可以作为该类型的常量。

常量定义

通过const关键字,可以给字面常量指定一个友好的名字:

const Pi float64 = 3.1415926
const zero = 0.0                // 无类型浮点常量
const (
    size int64 = 1024
    eof = -1                    // 无类型整型常量
)
const u, v float32 = 0, 3       // u = 0.0, v = 3.0,常量的多重赋值
const a, b, c = 3, 4, "foo"     // 无类型整型和字符串常量
Go的常量定义可以限定常量类型,但不是必需的。如果定义常量时没有指定类型,那么它与字面常量一样,是无类型常量。
常量定义的右值也可以是一个在编译期运算的常量表达式,比如const mask = 1 << 3
由于常量的赋值是一个编译期行为,所以右值不能出现任何需要运行期才能得出结果的表达式,比如试图以如下方式定义常量就会导致编译错误:
const Home = os.GetEnv("HOME")

原因很简单,os.GetEnv()只有在运行期才能知道返回结果,在编译期并不能确定,所以无法作为常量定义的右值。

预定义常量

Go语言预定义了这些常量:true、false、iota

iota比较特殊,可以被认为是一个可被编译器修改的常量,在每一个const关键字出现时被重置为0,然后在下一个const出现之前,每出现一次iota,其所代表的数字会自动增1.

从以下的例子可以理解iota的用法:

const ( // iota  reset to 0
    c0 = iota // c0 == 0
    c1 = iota // c1 == 1
    c2 = iota // c2 == 2
)
const (
    a = 1 << iota // a == 1
    b = 1 << iota // b == 2
    c = 1 << iota // c == 4
)
const (
    u         = iota * 42 // u == 0
    v float64 = iota * 42 // v == 42.0
    w         = iota * 42 // w == 84
)
const x = iota // x == 0
const y = iota // y == 0
如果两个const的赋值语句的表达式是一样的,那么可以省略后一个赋值表达式。因此,上面前两个const语句可简写为:

const (
    c0 = iota
    c1
    c2
)
const (
    a = 1 << iota
    b
    c
)

枚举

枚举指一系列相关的常量。Go语言中我们可以用在const后跟一对圆括号的方式定义一组常量。

const (
    Sunday = iota
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
    numberOfDays
)
同Go语言的其他符号(symbol)一样,以大写字母开头的常量在包外可见。

以上例子中numberOfDays为包内私有,其他符号则可被其他包访问。

0 0
原创粉丝点击