Der Hauptunterschied besteht darin, dass goto
Anweisungen in Sprachen, die sie unterstützen, das Springen zu jedem Speicherort im Programm mit wenig oder keiner Einschränkung ermöglichen. Während Korotinen auf der Oberfläche ähnlich erscheinen mögen, sind sie sehr unterschiedlich.
Coroutinen ermöglichen das Aussetzen von Prozeduren (mit ihrem gesamten Kontext) und werden unter bestimmten Standorten fortgesetzt. Also, während Korotinen anhalten und yield
Kontrolle auf andere Verfahren, bevor sie abschließen und dann später wieder aufnehmen, ist die Punkte, bei denen die Verfahren liefern und fortsetzen von im Voraus bekannt.
Es ist nicht möglich, einfach zu einer beliebigen Zeile in einer Prozedur zu springen, die betreffende Prozedur muss darauf warten, an einer bestimmten Stelle wieder aufgenommen zu werden. Während diese Kontrollübergabe viel strukturierter als mit goto
ist, ist es möglich, verwirrenden Code zu schreiben, indem dieser mächtige Mechanismus überbeansprucht wird. Aber ist das nicht bei jeder leistungsfähigen Programmiersprache der Fall? ;-)
Sie finden auch, dass Goroutine! = Coroutine. Eine Goroutine ist eher ein Thread mit wirklich einfacher Erstellung und Verwaltung. http://golang.org/doc/effective_go.html#goroutines –