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. 与FPGA相关的独热码

    独热码在状态机里面使用比价广泛,这一块有些人爱用,有些人嫌烦,有时候可以用用格雷码跳转,不过格雷码只支持那种一步到底的,中间有分支就不好做了,所以后来还是回到了独热码的正道上. 说白了独热码的使用,在 ...

  2. [转载]Linux驱动mmap内存映射

    原文地址:https://www.cnblogs.com/wanghuaijun/p/7624564.html mmap在linux哪里? 什么是mmap? 上图说了,mmap是操作这些设备的一种方法 ...

  3. MySQL单表多字段模糊查询解决方法 又折磨半天concat(字段不能为空,如为空则用IFNULL(字段,'');

    SELECT `id`,`weixin_id`,`user_name`,`sex`,`area_id`,`address_near`,`phone`,`create_time`,`import_use ...

  4. Servlet的复习

    Servlet概述 在JavaWeb阶段,使用Servlet是很经常的是事情,Servlet作为MVC中控制器(C)的存在,是不可缺少的一部分.当然Servlet作为JavaWeb的三大组件之一(其他 ...

  5. 【学习笔记】dp入门

    知识点 动态规划(简称dp),可以说是各种程序设计中遇到的第一个坎吧,这篇博文是我对dp的一点点理解,希望可以帮助更多人dp入门.   先看看这段话 动态规划(dynamic programming) ...

  6. oracle同义词详解

    在Oracle中对用户的管理是使用权限的方式来管理的,也就是说,如果我们想使用数据库,我们就必须得有权限,但是如果是别人将权限授予了我们, 我们也是能对数据库进行操作的,但是我们必须要已授权的表的名称 ...

  7. 【转】JAVA 并发性和多线程 -- 读感 (二 线程间通讯,共享内存的机制)

    原文地址:https://www.cnblogs.com/edenpans/p/6020113.html 参考文章:http://ifeve.com/java-concurrency-thread-d ...

  8. Tkinter Text(文本)

         Tkinter Text(文本): 文本小部件提供先进的功能,让您编辑多行文本格式,如改变其颜色和字体的方式显示.   文本小部件提供先进的功能,让您编辑多行文本格式,如改变其颜色和字体的方 ...

  9. vs2012应用程序的打包和图标设置

    最近用VS2010+QT做了一个小软件,为了把它打包发布,查了很多资料,现在总结下,便于以后查看. 本方法不限于VS2010,也不限于QT,只要你运行你的代码得到exe之后,都可以参照本方法进行. 参 ...

  10. Rhythmk 一步一步学 JAVA(11)Ibatis 环境配置

    1.项目文件分布. 2.example1.java: package com.rhythmk.example1; import java.io.IOException; import java.io. ...