GOTO ist normalerweise böse, weil Sie damit unstrukturierten Code erstellen können. Mit den üblichen Schleifen können Sie gut strukturierten Code erstellen, der einfach zu befolgen ist, da er strukturiert ist.
Wenn Sie nicht strukturierten Code haben, der von hier nach dort springt, haben Sie gerade das Böse gefunden, das aus der GOTO-Anweisung stammt. Fast immer ist es besser, es zu vermeiden. Vielleicht gibt es einmal alle 100.000 Zeilen einen Ort, an dem ein GOTO-Satz VIEL vereinfacht. Der Code ist also nicht böse, aber wenn Sie sich nicht sicher sind, sollten Sie das GOTO vermeiden.
Hoffe das hilft.
EDIT: Nun, um hier meine eigene Meinung hinzuzufügen, gibt es andere Anweisungen, mit denen Sie unstrukturierten Code erstellen können und die nicht als böse angesehen werden, wenn ich denke, dass sie es sein sollten.
Zum Beispiel ist eine Rückgabe in der Mitte einer Funktion ein GOTO zum Ende, daher vermeide ich sie und verwende nur eine Rückgabe in jeder Funktion direkt am Ende.
Andere Sprachen wie Vb.Net (vielleicht auch andere) erlauben Exit For, Exit While, Pausen und solche Dinge, die auch den Code unstrukturieren und ich denke, sollten vermieden werden.