Golang iota 在多行 const 块里的真实递增值规律

11次阅读

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

Golang iota 在多行 const 块里的真实递增值规律

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 = 1
  • Write // 1
  • Exec // 1

下划线 _ 占位会消耗行号但不生成常量

_ = iota 是明确跳过某值的常用手法,它仍算作一行有效声明,iota 照常递增,只是不绑定名称:

  • _ = iota // 跳过 0
  • Jan // iota 此时是 1 → Jan = 1
  • Feb // iota = 2 → Feb = 2
text=ZqhQzanResources