iota是Go语言const块内从0开始的编译期常量生成器,每行递增1,同行共用同一值,未赋值常量继承当前值,支持表达式运算。

Go语言中iota是常量生成器,专用于const块内,从0开始自动递增。它不是变量,不参与运行时计算,只在编译期展开——理解这点,绝大多数“猜输出”题就迎刃而解。
iota 在单个 const 块中的基础行为
iota每出现在一行新的const声明中,值就+1;同一行多个常量共用一个iota值。
- 没赋值的常量直接继承当前
iota值 - 有表达式(如
iota + 1、1 )则按当前iota代入计算 - 空行或注释行不重置
iota,只有新const块才重置为0
常见易错组合:位运算与移位
高频考点是1 生成2的幂次,但要注意起始位置和跳过项:
const ( a = 1 → a=1, b=2, c=4-
const ( _ = iota; a; b )→ a=1, b=2(首项被丢弃) -
const ( a = iota; _; b )→ a=0, b=2(第二项占位但不命名)
跨 const 块与显式赋值干扰
每个const块独立计数,但人为赋值会打断连续性:
-
const ( x = 5; y = iota )→ y=0(iota重置后未使用,仍为0) -
const A = iota; const (B; C)→ A=0, B=0, C=1(两个独立块) -
const ( P = "x"; Q = iota )→ P="x", Q=0(字符串字面量不影响iota)
实际笔试真题片段还原(2025年某大厂原题)
以下代码输出什么?
const (a = iota
b
c = "hi"
d
)
fmt.Println(a, b, c, d)
答案:0 1 hi 3。解释:a=0, b=1(继承iota=1),c被显式赋值为"hi"不改变iota值,d继承下一个iota=3(因为c那行没用iota,iota仍为2,到d行变成3)。










