tutorial the programming lib golang develop go goto

the - ¿Por qué Go tiene una declaración "goto"?



manual go (3)

El idioma Go de Google es un idioma nuevo. Por lo tanto, me sorprendió descubrir que tiene una declaración ''goto'' . Siempre me han enseñado que las declaraciones ''goto'' son una cosa del pasado y maldad porque ocluye el flujo real de un programa. La función (o métodos si se quiere) siempre es una mejor manera de controlar el flujo.

Debo estar perdiendo algo. ¿Por qué y cuándo usar ''goto'' es una buena idea? ¿O por qué Google lo incluyó?


Cuando realmente verificamos el código fuente de Gos ( la biblioteca estándar ), podemos ver dónde están realmente bien aplicados los goto .

Por ejemplo, en el archivo math/gamma.go , se utiliza la instrucción 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) }

El goto en este caso nos ahorra la introducción de otra variable (booleana) utilizada solo para control-flow, comprobada al final. En este caso , la instrucción goto hace que el código sea realmente mejor para leer y seguir más fácilmente (todo lo contrario al argumento en contra de lo mencionado).

También tenga en cuenta que la declaración goto tiene un caso de uso muy específico. La ''goto'' establece que no puede saltar sobre las variables que entran en el ámbito (ser declarado), y puede no saltar a otros bloques (de código).


Goto es una buena idea cuando ninguna de las funciones de control integradas hace lo que usted desea, y cuando puede expresar lo que quiere con un goto. (Es una pena en estos casos en algunos idiomas cuando no tienes un goto. Terminas abusando de alguna característica de control, usando indicadores booleanos, o usando otras soluciones peores que goto).

Si alguna otra función de control (usada de una manera razonablemente obvia) puede hacer lo que usted desea, debe usarla antes que goto. Si no, sé audaz y usa goto!

Finalmente, vale la pena señalar que Go''s goto tiene algunas restricciones diseñadas para evitar algunos errores desconocidos. Vea estas restricciones en ''goto''


Las declaraciones de Goto han recibido una gran cantidad de descrédito desde la era del código Spaghetti en los años 60 y 70. En aquel entonces, la metodología de desarrollo de software era muy pobre o inexistente. Sin embargo, Goto no es nativamente malo, pero por supuesto puede ser mal utilizado y abusado por programadores perezosos o no calificados. Muchos problemas con Gotos maltratados se pueden resolver con procesos de desarrollo como revisiones de códigos de equipo.

goto son saltos de la misma manera técnica que continue , break y return . Se podría argumentar que estas afirmaciones son malvadas de la misma manera, pero no lo son.

La razón por la cual el equipo de Go ha incluido Gotos probablemente se debe al hecho de que es una primitiva de control de flujo común. Además, con un poco de suerte, llegaron a la conclusión de que el alcance de Go excluye la posibilidad de abusar de un lenguaje idiota seguro.