go语言常量
Posted 夕水
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言常量相关的知识,希望对你有一定的参考价值。
常量是一个简单的标识符,程序运行时不会被改变.
常量可以是数字型(整数型,复数,浮点数型等),布尔型与字符串型.
常量使用const操作符来定义的,结构如下:
const identifier(标识符) type(数据类型,可省略) = value (一个常量值)
因为数据类型可以省略,所以常量的定义方式被分为显式类型定义与隐式类型定义.即显示类型定义就是不省略数据类型的写法,如const a string = '字符串';隐式类型定义就是省略数据类型的写法,如const b = 10.
同样的,多个常量的声明使用逗号操作符分隔开,如:
var a,b,c = true,'123',100;
来看一个示例:
枚举常量(也就是遍历常量),可以使用因式分解法,如下图所示:
实际上可以通过len()[表示计算长度]方法,unsafe.Sizeof()[表示计算数据所占的内存空间字节数]方法来计算表达式的值,来看如下一个示例:
由于使用内置函数才能使常量表达式生效,因此在使用相关方法时就需要引入相关的包,比如unsafe.Sizeof()方法就需要引入unsafe包.go语言计算长度与javascript有区别,就是一个数字为一个长度,一个字母也是一个长度,但是一个中文字符就相当于是三个长度.并且len()方法只能用于计算字符串的长度.来看下图示例:
这结果似乎有点颠覆计算机常识,但go语言中确实是这样的.
iota常量被认为是一个特殊的常量,也是一个可以被编译器修改的常量.在每一个const关键字出现之后,只要其中出现第一个iota常量值,就会默认为数字0,再出现一个,就自动加1,然后依次类推.来看以下一个示例:
因此,这个特殊的常量可以被用作枚举索引值(也就是遍历索引值).而实际上除了第一个出现的常量必须赋值表示一个标记索引以外,后续的常量都可以省略成如下的写法:
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语言常量的主要内容,如果未能解决你的问题,请参考以下文章