Golang的iota问题

通常人们认为iota就是0,其实并非如此。

确切的说,当iota在紧跟着关键字const的第一行出现时,iota为0,在第二行出现时,iota为1,以此类推;当iota再次遇到const时,重置为0.

golang spec关于iota的说明:http://golang.org/ref/spec#Iota

下面来看几段代码吧。

1、例1

package main

import "fmt"

const i1 = iota
const j1 = iota
const k1 = iota

func main() {
	fmt.Println("i1, j1, k1", i1, j1, k1)
	fmt.Println("Hello, playground")
}

http://play.golang.org/p/LQEyApa6dq

输出:

i1, j1, k1 0 0 0

2、例2

package main

import "fmt"

const (
	i1 = iota
	j1 = iota
	k1 = iota
)

func main() {
	fmt.Println("i1, j1, k1", i1, j1, k1)
	fmt.Println("Hello, playground")
}

输出:

i1, j1, k1 0 1 2

http://play.golang.org/p/gVhf2oC3Y4

这是我们最常使用的例子。

3、例3

package main

import "fmt"

const (
	i1, j1,k1 = iota, iota, iota
)

func main() {
	fmt.Println("i1, j1, k1", i1, j1, k1)
	fmt.Println("Hello, playground")
}

http://play.golang.org/p/W1-umpoOwS

输出:

i1, j1, k1 0 0 0

这个例子中,由于iota在同一行,因此,只计算一次,就是0

4、例4

package main

import "fmt"

const (
	i1 = -1
	j1 = iota
	k1
)

func main() {
	fmt.Println("i1, j1, k1", i1, j1, k1)
	fmt.Println("Hello, playground")
}

http://play.golang.org/p/C8ff8k1JAS

输出:

i1, j1, k1 -1 1 2

在这个例子中,由于iota在const的第二行出现,因此是1,这是最常犯的错误!!!

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2016-04-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏向治洪

微信小程序基本组件概述

为了更好的理解微信小程序,本文90%文字描述来源于官网的介绍。官网原链接https://mp.weixin.qq.com/debug/wxadoc/dev/co...

223100
来自专栏zaking's

CSS(CSS3)选择器(2)

该部分主要为CSS3新增的选择器 接上一篇 CSS(CSS3)选择器(1) 一.通用兄弟选择器:                         24:E ~ ...

32660
来自专栏天天

jQuery初识(20171025)

10640
来自专栏我就是马云飞

View的绘制流程源码分析

概述 View的绘制流程主要是指测量、布局以及绘制显示,在View中,measure是测量View的宽高,layout是控制View四个顶点的位置,而draw就...

21250
来自专栏java达人

jquery常用选择器

在Dom 编程中我们只能使用有限的函数根据id 或者TagName 获取Dom 对象. 然而在jQuery 中则完全不同,jQuery 提供了异常强大的选择器用...

22660
来自专栏从零开始学 Web 前端

从零开始学 Web 之 CSS3(一)CSS3概述,选择器

CSS3是CSS(层叠样式表)技术的升级版本,主要包括盒子模型、列表模块、超链接方式、语言模块、背景和边框、文字特效、多栏布局等模块。

13630
来自专栏分享达人秀

手把手教你读懂源码,View的绘制流程详细剖析

上一篇文章我们分析了View的加载流程,今天我们继续来深入学习View的绘制流程,接着上次的View绘制开始,同样使用的是Android 7.1源码。 ...

222100
来自专栏程序员的知识天地

H5学习从0到1-H5列表(8)

1.无序列表:使用标签 ul,li 属性:disc(默认实心圆) circle (空心圆)square (方块)

11730
来自专栏前端笔记

【 前端相关 网页样式 】总结CSS3中“伪类”与“伪元素”

熟悉前端的人都会听过css的伪类与伪元素,然而大多数的人都会将这两者混淆。本文从解析伪类与伪元素的含义出发,区分这两者的区别,并且列出大部分伪类与伪元素的具体用...

35570
来自专栏前端知识分享

第70天:jQuery基本选择器(一)

jQuery是javascript的一个库,包含多个可重用的函数,用来辅助我们简化javascript开发

9010

扫码关注云+社区

领取腾讯云代金券