Go中iota在const块内按行递增,每行仅增1次,多变量共享同值;空行和注释不触发递增;未赋值常量复用上行表达式并代入当前iota重算;下划线占位仍消耗行号。

Go 中 iota 在多行 const 块里的递增,本质是“按行计数”,不是按变量、不是按等号、也不是按是否显式使用——只要该行是 const 块内的有效声明行(含空初始化),iota 就加 1。
每行只递增一次,与变量个数无关
同一行声明多个常量时,它们共享当前行的 iota 值,不会因为变量多而多次递增:
-
const (a, b = iota, iota)→ a 和 b 都等于 0 -
c, d(下一行)→ c 和 d 都等于 1
空白行和注释行不触发递增
它们被跳过,iota 值保持不变,下一行仍延续上一个有效行的序号 +1:
A = iota // 0// 这是注释-
(空行) B // 1 ← 仍为第2个有效声明行
未赋值的常量自动继承上一行完整表达式
这不是“复制值”,而是复用上一行的整个右值表达式(含 iota 参与的运算),并代入当前行的 iota 值重新计算:
立即学习“go语言免费学习笔记(深入)”;
Read = 1Write // 1Exec // 1
下划线 _ 占位会消耗行号但不生成常量
写 _ = iota 是明确跳过某值的常用手法,它仍算作一行有效声明,iota 照常递增,只是不绑定名称:
_ = iota // 跳过 0Jan // iota 此时是 1 → Jan = 1Feb // iota = 2 → Feb = 2










