阅读:2791回复:0
Go 1.14或之前的一个循环代码BUG:请大家避免此写法直接上代码: 以下代码会直接跑崩 func main() { nums := []int{1, 2} for i, v := range nums { j := i + 1 //这个是关键 。增量=1时 会出问题 if j < 1 { break //这里不管写return 还是break 都有问题 } println(j,i,v) } } 相关 issue在这 https://github.com/golang/go/issues/40367 预估问题: golang的循环代码生成中间代码(SSA)中的OFORUNTIL和func addLocalInductiveFacts时,推导循环遍历时 在 xxx+1<1 这个增量判断上出了问题 注意:上述代码只有xxx+1 时才会出问题。如果写成: j:=i+2 //看这 if j<1 { xxxxx } 这样并不会有问题。 注意:golang的for 循环 在汇编层面 会使用类似JMP(plan9汇编) 等命令跳回循环体的开始位置来复用代码逻辑 |
|
|