17370845950

iota 经典笔试题:猜输出(2025-2026最新收集)
iota是Go语言const块内从0开始的编译期常量生成器,每行递增1,同行共用同一值,未赋值常量继承当前值,支持表达式运算。

Go语言中iota是常量生成器,专用于const块内,从0开始自动递增。它不是变量,不参与运行时计算,只在编译期展开——理解这点,绝大多数“猜输出”题就迎刃而解。

iota 在单个 const 块中的基础行为

iota每出现在一行新的const声明中,值就+1;同一行多个常量共用一个iota值。

  • 没赋值的常量直接继承当前iota
  • 有表达式(如 iota + 11 )则按当前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 = i

    ota )
    → 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)。