go语言常量

Posted 夕水

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言常量相关的知识,希望对你有一定的参考价值。

常量是一个简单的标识符,程序运行时不会被改变.

常量可以是数字型(整数型,复数,浮点数型等),布尔型与字符串型.

常量使用const操作符来定义的,结构如下:


const identifier(标识符) type(数据类型,可省略) = value (一个常量值)


因为数据类型可以省略,所以常量的定义方式被分为显式类型定义隐式类型定义.即显示类型定义就是不省略数据类型的写法,如const a string = '字符串';隐式类型定义就是省略数据类型的写法,如const b = 10.


同样的,多个常量的声明使用逗号操作符分隔开,如:

var a,b,c = true,'123',100;


来看一个示例:



枚举常量(也就是遍历常量),可以使用因式分解法,如下图所示:


go语言常量


实际上可以通过len()[表示计算长度]方法,unsafe.Sizeof()[表示计算数据所占的内存空间字节数]方法来计算表达式的值,来看如下一个示例:


go语言常量


由于使用内置函数才能使常量表达式生效,因此在使用相关方法时就需要引入相关的包,比如unsafe.Sizeof()方法就需要引入unsafe包.go语言计算长度与javascript有区别,就是一个数字为一个长度,一个字母也是一个长度,但是一个中文字符就相当于是三个长度.并且len()方法只能用于计算字符串的长度.来看下图示例:


go语言常量



go语言常量


这结果似乎有点颠覆计算机常识,但go语言中确实是这样的.


iota常量被认为是一个特殊的常量,也是一个可以被编译器修改的常量.在每一个const关键字出现之后,只要其中出现第一个iota常量值,就会默认为数字0,再出现一个,就自动加1,然后依次类推.来看以下一个示例:


go语言常量


因此,这个特殊的常量可以被用作枚举索引值(也就是遍历索引值).而实际上除了第一个出现的常量必须赋值表示一个标记索引以外,后续的常量都可以省略成如下的写法:

const(

    a = iota //a = 0

    b          //b =1

    c          //c = 2

)


来看一个示例:



如上图所示,一旦常量出现了值,那么这个值就会是下一个常量的值,因为iota常量值已经做了一个标记索引,就好像JavaScript中遍历一个对象那样,做复制.


再来看一个结合位操作符的示例:



此时的位操作符同JavaScript的位操作符原理相同,也就是说 最初常量a = 1 << 0然后就是二进制000...(此处一共30个0)10左移0位,变成了000...(此处一共30个0)10,转换成十进制数就是1,因此常量a就是1,再看常量b实际上就是左移一位,变成了000...(此处一共29个0)100,转换成十进制数就是2,然后依次类推,不难得出为什么常量c是4,常量d是8的结果了.


注:这里需要理解位操作符左移操作符的原理(不明白请看JavaScript位操作符,),结合go语言中iota常量的原理(不明白请往上看iota常量的含义),既可以分析出结果.

以上是关于go语言常量的主要内容,如果未能解决你的问题,请参考以下文章

Go语言之变量,常量

go语言--语言常量

Go语言基础之常量

Go语言常量

每天一点Go语言——变量常量运算符解析

Go语言常量