Pergunta

Eu sempre li sobre a coisa horrível que "goto" é. Mas hoje, lendo sobre a linguagem de programação do Google Go , vejo que suports co-rotinas (Goroutines).

A questão é:

Coroutine == GoTo 

ou

Coroutine != GoTo?

Por quê?

Foi útil?

Solução

Goroutines não são o mesmo que um goto - eles correm em paralelo com o código principal. Quando você declarar algo como (a partir de seu exemplo em http://golang.org/doc/effective_go.html)

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

o código de linha principal continua - não espere o tipo de acabamento. A rotina de classificação começa-se em seu próprio segmento leve de execução e quando termina o tipo que sai da linha.

A Goto faria com que o código de linha principal de galho em um caminho de execução separada -. Por isso as declarações após o goto nunca seria executado

Outras dicas

A principal diferença é que as declarações goto em línguas que lhes dão suporte permitem saltar para qualquer local no programa com pouca ou nenhuma restrição. Enquanto coroutines pode na superfície parecem semelhantes eles são muito diferentes.

coroutines permitir procedimentos para ser suspensa (com todo o seu contexto) e retomou a <> fortes certos fortes locais. Assim, enquanto coroutines fazer pausa e controle yield a outros procedimentos antes que eles completa e, em seguida, retomar mais tarde, os pontos em que os procedimentos produzir e currículo de é conhecido antes do tempo.

Não é possível saltar simplesmente uma linha arbitrária em um procedimento, o procedimento em questão tem de esperar para ser retomado em um local específico. Embora esta passagem do controle é muito mais estruturado do que com goto é possível escrever confundindo código por uso excessivo desse mecanismo poderoso. Então, novamente, que é que não é o caso com todos os recursos poderosa linguagem de programação? ; -)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top