Pregunta

Siempre he leído sobre la cosa horrible que "goto" es. Pero hoy en día, la lectura sobre la programación de Google rel="nofollow lenguaje Ir , veo que suports corrutinas (Goroutines).

La pregunta es:

Coroutine == GoTo 

o

Coroutine != GoTo?

¿Por qué?

¿Fue útil?

Solución

Goroutines no son lo mismo que un Goto - corren en paralelo con el código principal. Cuando dice algo así como (a partir de su ejemplo en http://golang.org/doc/effective_go.html)

go list.Sort();  // run list.Sort in parallel; don't wait for it. 

el código de la línea principal continúa - que no espera a que el tipo hasta el final. La rutina de ordenación se pone en marcha en su propio hilo de peso ligero de la ejecución y cuando termina la clase que las salidas de rosca.

A Goto haría que el código de la línea principal en rama a una ruta de ejecución separada -. Por lo que las declaraciones después de la goto nunca llegaría plazo

Otros consejos

La diferencia clave es que las declaraciones de goto en lenguajes que soportan les permiten saltar a cualquier ubicación en el programa con poca o ninguna restricción. Mientras corrutinas de mayo, sobre la superficie parecen similares son muy diferentes.

corrutinas permiten procedimientos a ser suspendidos (con todo su contexto) y se reanuda a ciertos ubicaciones. Así, mientras que corrutinas no pausa y control yield a otros procedimientos antes de completar y luego reanudar más tarde, los puntos en los que los procedimientos de rendimiento y reanudar desde que se conoce de antemano.

No es posible simplemente saltar a una línea arbitraria en un procedimiento, el procedimiento en cuestión tiene a la espera de ser reanudado en un lugar específico. Si bien este paso de control es mucho más estructurado que con goto es posible escribir código confuso por el desgaste de este poderoso mecanismo. Por otra parte es decir que no es el caso con cada potente función de lenguaje de programación? ; -)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top