Go语言学习(七):常量

常量概念

常量是指编译期间就已知的且不可改变的值。
从功能角度看,当出现不需要被更改的数据时,应该使用常量进行存储,比如圆周率
常量使用一个名称来绑定一块内存地址,该内存地址中存放的数据类型有定义常量时指定的类型来决定,并且存放在该内存地址里面的存放的值是不可以被改变的。
常量的值仅仅支持,基础类型,字符串,字符,整型,浮点,布尔。

字面常量(字面量)

字面常量通常指在程序中硬编码的常量。为基本数据类型赋值的结果值被称之为字面常量,例如,const a = 10;这个10被称之为字面常量。

66 //数值常量
3.1415926  //浮点类型的常量
3.12+12i  //复数类型的常量
true     //布尔类型的常量
"for"    //字符串类型的常量

字面常量在Go语言程序中是无类型的,只要这个常量值在相应类型的值域范围内,就可以作为该类型常量值。比如66 就可以赋值给 :int 、uint、int32、int64、float32、float64、complex64、complex128等类型的常量名。

常量的定义

使用const关键字可以给字面常量定义一个名称。

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, "fot"  //a = 3, b = 4, c = "fot"  //无类型整型和字符串常量

跟变量一样,类型可以通过值推导出来,大多数情况下可以省略类型。除非想用例如int8,byte,float32这种非默认类型时,定义常量的时候需要指定类型:

const c2 = 1000
const c3 int16 = 1000

常量的赋值是一个编译期行为,所以常量值不允许出现任何需要在运行期间才能得出结果的表达式。

const v1 = 1 << 3 //支持
const v2 = os.GetEnv("HOME") //不支持, os.GetEnv()只有在运行期间才知道返回结果。

也不能使用变量为其赋值。可以使用,确定的字面量,字面量运算,内置函数运算,其他定义常量,这些在编译时可以确定的内容为常量赋值

const v1 = "fk"
const (
    v2 = v1
    v3 = 42 + 11
    V4 = len("fk")
)    

预定义常量

Go语言预定义的常量:true、false、iota。
iota:迭代定义常量。const配合iota关键字使用,可以定义一组由0开始+1迭代的常量。在每一个const关键字出现时iota常量值被重置为1,然后在下一个const出现之前,没出现一次iota其所代表的值就会加1。

const (        //此时iota被重置为0
    v1 = iota  //v1的值是0
    v2 = iota  //v2的值是1
    v3 = iota  //v3的值是2
)
const (    //此时iota被重置为0
    a = 1 << iota   //a的值是1
    b = 1 << iota   //b的值是2
    c = 1 << iota   //c的值是3
)
const (    //此时iota被重置为0
    u = iota * 3 //u的值是0
    v float64 = iota * 42  //v的值是42.0
    w = iota * 42  //w的值是84
)
const (
  c1 = 42 // iota = 0,虽然未使用iota,但后边(const()中)有使用,此时iota被初始化为0,下面每行累加1
  c2 = iota      // iota = 1,iota继续累加,使用了iota
  c3 = 1024      // iota = 2,同样未使用,但iota的值继续累加。c3 被定义为1024
  c4             // iota = 3,c4延续上面的定义c4=1024,iota继续累加==如果2个赋值语句的表达式是一样的可以省略后面一个赋值表达式==
  c5 = iota      // iota = 4,iota继续累加,使用了iota,c5 = 5
  c6 = iota      // iota = 5,iota继续累加,使用了iota,c6 = 6
)
const x = iota   //x的值为0
const y = iota   //y的值为0

枚举

枚举指一系列相关的常量。比如:

const (
    Sunday = iota
    Monday 
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
    numberofDays    //这个常量没有导出

Go语言当中以大写字母开头的常量在包外可见,可以被其他包访问。其他符号也是一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值