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. Car-eye-http-flv-module 实现nginx-rtmp-mudule HTTP方式的FLV直播功能

    nginx-rtmp-mudule RTMP 是一款优秀的Car-eye-http-flv-module 是在nginx-rtmp-mudule RTMP基础上修改的流媒体服务器,除了支持flash播 ...

  2. python is 和 == 的区别

    一.is 和 == 的区别 == 比较 比较的俩边的值 is 比较 比较的是内存地址 id() 二.小数据池 数字小数据池的范围 -5 ~ 256 字符串中如果有特殊字符他们的内存地址就不一样 字符串 ...

  3. Asp.net mvc 限制路由参数类型

    routes.MapRoute(                "Activity2", // 路由名称                "Activity/{id}&qu ...

  4. Canvas帧数和步长实例

    <!DOCTYPE HTML> <html lang="zh-CN"> <head> <meta http-equiv="Con ...

  5. win7 wifi

    win7 wifi the settings saved on this computer for the network do not match the requirements of the n ...

  6. Redis实战——安装问题汇总

    借鉴:https://www.cnblogs.com/liu2-/p/6914159.html 通用方法:迅速查看缺少的包的路径,并安装 yum provides *** 如 yum provides ...

  7. 【310】◀▶ Python 日期和时间

    参考: python 时间日期计算 Python 日期和时间(菜鸟教程) 8.1. datetime — Basic date and time types python中datetime模块中dat ...

  8. Mysql 中的伪列用法1

    SELECT ( @rowNO := @rowNo + 1 ) AS rowno, A.*FROM ( SELECT * FROM t_user ) a, ( SELECT @rowNO := 0 ) ...

  9. ios常用空间UIScrollViewIndicator的一些属性

    UIScrollView属性: 1  alwaysBounceHorizontal         BOOL值,当水平滚条到达终点,总是(视图)弹跳 2  alwaysBounceVertical   ...

  10. MySQL数据库篇之单表查询

    主要内容: 一.单表查询的语法 二.关键字的执行优先级 三.简单查询 四.where约束 五.分组查询 group by 六.having过滤 七.查询排序 order by 八.限制查询的记录数 l ...