Golang switch语句内修改变量值的运行结果是否符合预期?
结论
这个运行结果完全属于Golang的预期正常行为。
核心原因
Go语言的switch语法有两个核心规则直接决定了上述输出:
- Go的
switch默认在单个case执行完成后自动跳出,不会顺延执行后续case,除非显式使用fallthrough关键字 fallthrough不会重新判断下一个case的条件,而是直接强制执行下一个case的代码块,所有case的条件判断仅在最初进入switch选择分支时执行一次,后续fallthrough流程会完全跳过条件校验。
执行流程对应验证
我们可以结合代码逻辑对应输出确认规则:
- 初始变量
i=10,进入switch true分支匹配,第一个case条件i < 20成立,进入分支执行:- 打印
10 is less than 20 - 修改
i的值为100 - 执行
fallthrough,直接进入下一个case,完全跳过i < 19的条件判断
- 打印
- 后续所有带
fallthrough的case都遵循相同逻辑:不需要判断条件是否匹配,直接执行当前case的打印语句,然后自动跳到下一个case - 直到最后一个没有
fallthrough的case执行完成,整个switch流程结束
常见误区:很多从C/C++转来的开发者会误以为
fallthrough会重新校验后续case的条件,才会觉得该输出不符合预期,这是对Go语法的认知偏差,而非语言运行异常。
内容的提问来源于stack exchange,提问作者Laxmi Prasad
相关产品推荐
相关产品推荐

