Cuando realmente verificamos el código fuente de la biblioteca estándar de Go, podemos ver dónde goto
están realmente bien aplicados los correos electrónicos.
Por ejemplo, en el math/gamma.go
archivo, se usa la goto
declaración :
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)
}
En goto
este caso, nos ahorra la introducción de otra variable (booleana) utilizada solo para el flujo de control, verificada al final. En este caso , la goto
declaración hace que el código sea realmente mejor de leer y más fácil de seguir (muy al contrario del argumento goto
que mencionaste en tu contra ).
También tenga en cuenta que la goto
declaración tiene un caso de uso muy específico. La especificación del lenguaje en goto establece que no puede saltar sobre las variables que entran en el alcance (siendo declaradas), y no puede saltar a otros bloques (de código).