我惊讶地发现 Go 有一个“goto句子。我一直被教导goto语句已经成为过去和邪恶,因为它会阻碍程序的实际过程,函数或方法总是控制过程的更好方法。9 N- L( V, S4 ~. @7 [9 }
我一定错过了什么。谷歌为什么包括它? & a/ T6 j- j( x2 V0 y G: _/ I ; u' W/ P) ~1 @# N6 O) D 解决方案: + I8 h+ h% J9 |1 o3 T" @ ? 实际检查 Go当 标准库的源代码时,我们可以看到gotos 实际应用良好的地方。 Z8 T% a1 t. |) ?7 Z
例如,在math/gamma.go以下文件用于文件goto语句:8 b8 a0 q: D7 R! O7 j/ _# e% u0 p
[code] for x -1e-09 { goto small } z = z / x x = x 1 for x 在goto在这种情况下,我们节省了从导入到控制流的另一个(布尔值)变量。在这种情况下,该goto句子实际上使代码更容易阅读和遵循(和goto你提到的反对论点完全相反)。7 c: l$ R! J. g \+ k5 f8 N
请注意,这个goto语句有一个非常具体的用例。goto 语言规范声明不能跳过进入作用域(声明)的变量或其他(代码)块。