谷歌的Go语言是一种新语言.因此,我惊讶地发现它有一个'goto'声明.我一直被教导说'goto'语句已成为过去,而且它会使程序的实际流程陷入窘境.功能(或方法,如果你愿意)总是一种更好的控制流量的方法.
我肯定错过了什么.为什么以及何时使用'goto'是一个好主意?或者谷歌为什么要加入它?
Kis*_*aki 72
当我们实际检查Gos源代码(标准库)时,我们可以看到gotos实际应用的位置.
例如,在math/gamma.go文件中,使用goto语句:
for x < 0 {
if x > -1e-09 {
goto small
}
z = z / x
x = x + 1
}
for x < 2 {
if x < 1e-09 {
goto small
}
z = z / x
x = x + 1
}
if x == 2 {
return z
}
x = x - 2
p = (((((x*_gamP[0]+_gamP[1])*x+_gamP[2])*x+_gamP[3])*x+_gamP[4])*x+_gamP[5])*x + _gamP[6]
q = ((((((x*_gamQ[0]+_gamQ[1])*x+_gamQ[2])*x+_gamQ[3])*x+_gamQ[4])*x+_gamQ[5])*x+_gamQ[6])*x + _gamQ[7]
return z * p / q
small:
if x == 0 {
return Inf(1)
}
return z / ((1 + Euler*x) * x)
}
Run Code Online (Sandbox Code Playgroud)
在goto从导入只是控制流使用的另一(布尔值)的变量,在端部检查在这种情况下我们节省.在这种情况下,该goto语句使代码实际上更好地阅读和更容易遵循(完全与goto你提到的反对你的论点相反).
另请注意,该goto语句具有非常具体的用例.关于goto的语言规范声明它可能不会跳过进入作用域(被声明)的变量,并且它可能不会跳转到其他(代码)块.
Gus*_*tav 10
自60 年代和 70 年代的意大利面条式代码时代以来,Goto 语句受到了很多质疑。当时的软件开发方法非常差。然而,Goto 本身并不是邪恶的,但当然可以被懒惰或不熟练的程序员误用和滥用。许多被滥用的 Goto 问题都可以通过开发流程(例如团队代码审查)来解决。
goto以与continue、break和相同的技术方式进行跳跃return。人们可能会争辩说,这些陈述以同样的方式是邪恶的,但事实并非如此。
Go 团队之所以包含 Goto,可能是因为它是一个常见的流控制原语。此外,他们希望得出结论,Go 的范围不包括使白痴安全的语言不可能被滥用。
| 归档时间: |
|
| 查看次数: |
36429 次 |
| 最近记录: |