Go语言中的Iota
一、复习常量
提到Iota这个关键字,就必须要复习一下Go语言的常量。
1.Go语言的常量一般使用const声明
2.Go语言的常量只能是布尔型、数字型(整数型、浮点型和复数)和字符串型
3.Go语言的常量可以不指定类型,由编译器自己推断,如下面的【string】就是可以不写的(也称为 隐式类型定义)
const s string = "constant"
4.常量不能在程序运行时改变
二、Iota的用法
通过一个具体的事例,来看iota的特性。例下面的代码输出的结果每一个常量的值是什么?
package IotaDemo import (
"fmt"
) const(
a = iota
b
c
) const(
m=<<iota
n=<<iota
x=
y = iota
z=iota>>
o
) func IotaTest() { fmt.Println("a=",a)
fmt.Println("b=",b)
fmt.Println("c=",c) fmt.Println("m=",m)
fmt.Println("n=",n)
fmt.Println("x=",x)
fmt.Println("y=",y)
fmt.Println("z=",z)
fmt.Println("o=",o)
}
结果如下:
a=
b=
c=
m=
n=
x=
y=
z=
o=
上面的结果说明了iota的特性,如下:
- iota只能被使用在const限定中,相当于一个常量的计数器
- iota相当于一个枚举值,默认从0开始,在一个const中,会进行+1,例如a、b、c 可以看出来
- iota不会因为const中被赋值了固定值,就不再增加,const中每有一个常量就+1,例如 x和y ,y并没有因为x被赋值为10,就是2,而是3
- 每次进入一个新的const,iota都会重新开始计算
补充移位操作知识点:
对于Go语言的<<(右移)和 >>(左移)操作,关键点如下:
1.将移位的值先转换成2进制,右移动就是高位补0,左移就是低位补0
2.操作符右边的是需要移动的位数,左边是待移动的值,
例如 1<<3 就是把1向左移动3位,即00000001 左移3位 变为 00000100 就是4
3<<1 就是把3向左移动1为,即00000011 左移1为 变为 00000110 就是6
更多可以参考:https://www.sojson.com/operation/go.html
Go语言中的Iota的更多相关文章
- C语言中,头文件和源文件的关系(转)
简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句, ...
- C 语言中 setjmp 和 longjmp
在 C 语言中,我们不能使用 goto 语句来跳转到另一个函数中的某个 label 处:但提供了两个函数——setjmp 和 longjmp来完成这种类型的分支跳转.后面我们会看到这两个函数在处理异常 ...
- c语言中的scanf在java中应该怎么表达,Scanner类。
1 java是面向对象的语言 它没有像C语言中的scanf()函数,但是它的类库中有含有scanf功能的函数 2 java.util包下有Scanner类 Scanner类的功能与scanf类似 3 ...
- C语言中do...while(0)的妙用(转载)
转载来自:C语言中do...while(0)的妙用,感谢分享. 在linux内核代码中,经常看到do...while(0)的宏,do...while(0)有很多作用,下面举出几个: 1.避免goto语 ...
- C语言中,定义的含义?声明的含义?它们之间的区别是什么?
在C语言中,对于定义和声明,也许我们非常的熟悉,但不一定真正的了解! 定义的含义:所谓定义,就是创建(编译器)一个对象,为这个对象分配一块内存空间并取名,也就是我们平常所说的变量名或对象名,一旦这个名 ...
- C++中函数的默认参数和C语言中volatile的学习
1.函数默认参数 1 int func(int a,int b=10) 2 { 3 return a*b; 4 } 5 6 int main() 7 { 8 int c=func(2); 9 cout ...
- C语言中qsort函数用法
C语言中qsort函数用法-示例分析 本文实例汇总介绍了C语言中qsort函数用法,包括针对各种数据类型参数的排序,非常具有实用价值非常具有实用价值. 分享给大家供大家参考.C语言中的qsort ...
- c语言中time相关函数
工作中遇到的函数: int seed = time(NULL); srand(seed); signal(SIGINT, stop); signal(SIGUSR1, sig_usr1); 搜time ...
- C语言中的static 详细分析
转自:http://blog.csdn.net/keyeagle/article/details/6708077/ google了近三页的关于C语言中static的内容,发现可用的信息很少,要么长篇大 ...
随机推荐
- phpstudy等php本地环境运行缓慢的问题解决方法
我们经常会使用些一键安装包部署本地服务器环境.比如phpstudy.但是会有不少人发现,wordpress等使用数据库的程序打开或者切换页面的速度明显低于静态站点.甚至需要好几秒.这个问题一直困扰了我 ...
- DIV中文字换行显示
居然第一次遇到这种问题,还想了半天到底是怎么回事,为什么明明div设置宽度了,里面的文字超过宽度后居然不换行. (1)word-break属性,可以让浏览器实现在任意位置换行. normal:使用浏览 ...
- WebGIS中以version方式实现代码更新后前端自动读取更新代码的方法
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 前言 GIS代码进行更新后,由于用户前端已有缓存,导致更新的功能不 ...
- iOS----------计算一段代码执行时间
CFAbsoluteTime start = CFAbsoluteTimeGetCurrent(); //在这写入要计算时间的代码 // do something CFAbsoluteTime end ...
- idea部署Maven入门(一)——环境变量的配置和下载
介绍: 1 Maven是用来管理jar包的一种工具, 2 Maven主要是构建java项目和java web项目 3 maven项目管理所依赖的jar ...
- (办公)json报错的解决问题的小经验.
经验:一半,一半的查,看那一段报错,当确定这一步的时候,用最笨的方法,用眼去看,出哪里的错误. 看有没有替换特殊字符的方法,去整理.
- 测者的测试技术手册:自动的自动化框架EvoSuite集成Cobertura得到可视化的代码覆盖报告
EvoSuite是由Sheffield等大学联合开发的一种开源工具,用于自动生成测试用例集,生成的测试用例均符合Junit的标准,可直接在Junit中运行.得到了Google和Yourkit的支持. ...
- LeetCode算法题-Student Attendance Record I(Java实现)
这是悦乐书的第258次更新,第271篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第125题(顺位题号是551).您将获得一个表示学生出勤记录的字符串. 该记录仅包含以下 ...
- 软件设计之Deep Module(深模块)
类是不是越小越好?最近在读John Ousterhout的<A Philosophy of Software Design>,感到作者文笔流畅,书中内容具有启发性.这里摘要一部分内容,以供 ...
- android glide图片加载框架
项目地址: https://github.com/bumptech/glide Glide作为安卓开发常用的图片加载库,有许多实用而且强大的功能,那么,今天就来总结一番,这次把比较常见的都写出来,但并 ...