GO之iota

iota是go语言中的一种常数计数器,只能在常量表达式中使用。
iota在常量表达式中使用具有以下规则:

  1. iota每次遇到const,都会被初始化为0;
  2. iota是一个常量计数器,它有自己专有的内存保存值,每新增一行,不管是否出现iota关键字,iota的值都会加一,只与行数有关
  3. 在使用iota进行常量初始化时,会保存与iota相关的表达式,并用该表达式,初始化以后的常量

看以下代码,有详细注释

package main

import "fmt"

func main() {
	const (
		aa = iota     // iota = 0, 此时常量初始化表达式为 常量 = iota, 所以 aa = iota = 0,
		bb            // iota = 1, bb = iota = 1
		cc = "cc"     // iota = 2, 此处常量初始化表达式变更为 常量 = "cc", 所以 cc = "cc",
		dd            // iota = 3, dd = "cc"
		ee            // iota = 4, ee = "cc"
		ff = iota     // iota = 5, 此处常量初始化表达式变更为 常量 = iota, ff = 5
		gg            // iota = 6, gg = iota = 6

		a  = 2 * iota // iota = 7, 此处常量初始化表达式变更为 常量 = 2 * iota, 所以 a = 2 * iota = 14
		b             // iota = 8, b = 2 * iota = 16
		c             // iota = 9, c = 2 * iota = 18

		d = 3 * iota // iota = 10, 此处常量初始化表达式变更为 常量 = 3 * iota, 所以 d = 3 * iota = 30,
		e            // iota = 11, e = 3 * iota = 33
	)

	fmt.Println("aa:", aa, "bb:", bb, "cc:", cc, "dd:", dd, "ee:", ee, "ff:", ff, "gg:", gg, "a:", a, "b:", b, "c:", c, "d:", d, "e:", e)
}

运行结果为

aa: 0 bb: 1 cc: cc dd: cc ee: cc ff: 5 gg: 6 a: 14 b: 16 c: 18 d: 30 e: 33

对照代码和运行结果,我们可以看出:

  • iota计数器,每增一行,都会加一,就如同规则2所述
  • 在使用iota进行常量初始化时,会保存每次显式的初始化表达式,使得后面的初始化都按照新的初始化表达式进行,如同规则3所述

关于规则1,可以自己试验一下,这里就不再说明验证

GO语言是支持多变量同时赋值的,这里也可以,不过,在使用iota进行多赋值时,iota表达式后面的常量数量要保持一致,否则会报错,看以下代码

package main

import "fmt"

func main() {
	const (
		aa, bb = iota + 1, iota + 2  // iota = 0, 常量初始化表达式:常量1, 常量2 = iota + 1, iota + 2 = 1, 2
		cc, dd                       // iota = 1, cc, dd = iota + 1, iota + 2 = 2, 3
		ee, ff = "ee", "ff"          // iota = 2, 常量初始化表达式变更为 常量1, 常量2 = "ee", "ff"
		gg, hh                       // iota = 3, gg, hh = "ee", "ff"
		ii, jj = iota * 3, 1 << iota // iota = 4, 常量初始化表达式变更为 常量1, 常量2 = iota * 3, 1 << iota = 12, 16
		kk, ll                       // iota = 5, kk, ll = 15, 32
	)

	fmt.Println(aa, bb, cc, dd, ee, ff, gg, hh, ii, jj, kk, ll)
}

代码运行结果为

1 2 2 3 ee ff ee ff 12 16 15 32
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值