iota,是go语言的特殊常量,可以认为是一个可以被编译器修改的常量。

在每一个const关键字出现时,被重置为0,然后在下一个const出现之前,每出现一次iota,其所代表的数字会自动增加1。

来看看代码:

const y = iota
const r = iota func main() {
fmt.Print("y的值为:")
fmt.Println(y)
fmt.Print("r的值为:")
fmt.Println(r)
}

每一个const关键字出现时,都被重置为0.所以输出为:

    y的值为:0
r的值为:0

然后在下一个const出现之前,每出现一次iota,其所代表的数字会自动增加1。

const (
q = iota
w = iota
e = iota
}
func main() {
fmt.Print("q的值为:")
fmt.Println(q)
fmt.Print("w的值为:")
fmt.Println(w)
fmt.Print("e的值为:")
fmt.Println(e)
}

输出:

    q的值为:0
w的值为:1
e的值为:2

其实个人认为iota最重要的部分是当做枚举值使用。

那么提出这样一个问题,如果要让e等于4 怎么办?

const (
q = iota
w = iota
_
_
e = iota
}
func main() {
fmt.Print("q的值为:")
fmt.Println(q)
fmt.Print("w的值为:")
fmt.Println(w)
fmt.Print("e的值为:")
fmt.Println(e)
}
//输出
q的值为:0
w的值为:1
e的值为:4

再看个特殊例子1,e的值是多少:

const (
q = iota
w = 100 ////即使w没有调用iota,但是同样会使iota += 1
e = iota
}
func main() {
fmt.Print("q的值为:")
fmt.Println(q)
fmt.Print("w的值为:")
fmt.Println(w)
fmt.Print("e的值为:")
fmt.Println(e)
}

所以输出:

    q的值为:0
w的值为:100
e的值为:2

再看看个特殊例子2,w和e会延续上一级的q的使用,调用iota

const (
q = iota
w // w和e会延续上一级的q的使用,调用iota
e //
f = 100
h = iota
}
func main() {
fmt.Print("q的值为:")
fmt.Println(q)
fmt.Print("w的值为:")
fmt.Println(w)
fmt.Print("e的值为:")
fmt.Println(e)
fmt.Print("f的值为:")
fmt.Println(f)
fmt.Print("h的值为:")
fmt.Println(h)
}

输出结果为:

    q的值为:0
w的值为:1
e的值为:2
f的值为:100
h的值为:4

再看看个特殊例子3,对于iota每新增一行 计数才加1 同一行 计数不加1。

const (
q, w = iota + 1, iota + 3
e, f
h = iota
}
func main() {
fmt.Print("q的值为:")
fmt.Println(q)
fmt.Print("w的值为:")
fmt.Println(w)
fmt.Print("e的值为:")
fmt.Println(e)
fmt.Print("f的值为:")
fmt.Println(f)
fmt.Print("h的值为:")
fmt.Println(h)
}

输出的结果为,原因为   对于iota每新增一行 计数才加1 同一行 计数不加1。所以q为1,w为3.而e只去延续q,f只去延续w。

    q的值为:1
w的值为:3
e的值为:2
f的值为:4
h的值为:2

go语言的特殊变量 iota的更多相关文章

  1. Go语言基础之变量和常量

    Go语言基础之变量和常量 变量和常量是编程中必不可少的部分,也是很好理解的一部分. 标识符与关键字 标识符 在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名.常量名.函数名等等. Go语 ...

  2. GO语言常量和变量

    标识符与关键字 标识符 人为定义有特殊意义的词,Go语言中标识符由字母数字和_(下划线)组成,并且只能以字母和_开头. 关键字 关键字是指编程语言中预先定义好的具有特殊含义的标识符. GO语言中有25 ...

  3. 1.2 Go语言基础之变量和常量

    变量和常量是编程中必不可少的部分,也是很好理解的一部分. 一.标识符与关键字 1.1 标识符 在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名.常量名.函数名等等. Go语言中标识符由字 ...

  4. GO学习-(4) Go语言基础之变量和常量

    Go语言基础之变量和常量 变量和常量是编程中必不可少的部分,也是很好理解的一部分. 标识符与关键字 标识符 在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名.常量名.函数名等等. Go语 ...

  5. Golang语言系列-01-Go语言简介和变量

    Go语言简介 Go(又称Golang)是Google开发的一种静态强类型.编译型.并发型,并具有垃圾回收功能的编程语言. 罗伯特·格瑞史莫(Robert Griesemer),罗勃·派克(Rob Pi ...

  6. C语言 遍历流程 变量生命周期

    来自c程序设计 谭浩强 程序编译流程 运行c程序的步骤 在编好一个c程序后.怎样上机进行编译运行呢?一般要经过一下几个步骤: 上机输入和编辑源程序.通过键盘和计算机输入程序,如果发现有错误,要及时改正 ...

  7. C语言中计算变量占用内存空间

    C语言中计算变量占用内存空间 在C语言中通常用[sizeof]运算符计算变量占内存空间,如下面的例子:

  8. 不可或缺 Windows Native (2) - C 语言: 常量,变量,基本数据类型

    [源码下载] 不可或缺 Windows Native (2) - C 语言: 常量,变量,基本数据类型 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 常量 变量 基本 ...

  9. C语言的指针变量

    C语言的指针变量 在C语言中,变量是固定范围的存储空间,它存储的是赋给他的值, 比如: ; /* 这里是定义一个整型变量a,并把12这个值存储在a的地址空间上 这个地址空间是系统随机分配的,对用户是透 ...

随机推荐

  1. 前端必须会的!!!关于对HTTP协议的理解、HTTP协议原理分析

    http协议学习系列 1. 基础概念篇 1.1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web C ...

  2. node中的favicon.icon请求

    var http=require("http"); var server=http.createServer(); server.on("request", c ...

  3. 【BZOJ】1913: [Apio2010]signaling 信号覆盖(计算几何+计数)

    题目 传送门:QWQ 分析 人类智慧题,不会做...... 详细题解1      详细题解2 总体思路是考虑四边形 讨论凹四边形凸四边形,最后加一个单调性优化省掉个$ O(n) $ 代码 代码感觉好短 ...

  4. Cocos2d-html5帧动画

    单独获取plist里面一个文件: cc.SpriteFrameCache.getInstance().addSpriteFrames(s_test_plist); var spriteTest2 = ...

  5. web开发-CORS支持

    一.简介 Web 开发经常会遇到跨域问题,解决方案有:jsonp,iframe,CORS 等等 1.1.CORS与JSONP相比 1.JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求 ...

  6. 在Ubuntu 16.04如何安装Java使用apt-get的

    转自:https://www.howtoing.com/how-to-install-java-with-apt-get-on-ubuntu-16-04/ 的Java和JVM(Java的虚拟机)是广泛 ...

  7. No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer解决方法

    org.codehaus.jackson.map.JsonMappingException: No serializer found for class org.hibernate.proxy.poj ...

  8. 大神的---解决tomcat内存溢出问题----tomcat报错:This is very likely to create a memory leak问题解决

    tomcat memory leak解决方案 这种问题在开发中经常会碰到的,看看前辈的总结经验 Tomcat内存溢出的原因  在生产环境中tomcat内存设置不好很容易出现内存溢出.造成内存溢出是不一 ...

  9. failed to open stream: No such file or directory 报错解决方法

    1.首先检查是否是文件名错误(比如有空格):是否因为路径不完整(比如缺少http://,或者缺少文件扩展名.doc等): 2.若是在本地中文名文件打开报错,我就是因为编码不一致导致: Windows中 ...

  10. javaScript字符串操作

    JS自带函数concat将两个或多个字符的文本组合起来,返回一个新的字符串.var a = "hello";var b = ",world";var c = a ...