Код то может и понятный, но тупой. Id должен быть сгенерирован уникальным, а не проверятся потом уникальный получился или нет(или что он вообще делает). Тот же код без goto
do
{
id = GenerateString(32)
}while(unique(id))
Порядок выполнения кода должен быть понятен. Бросание хода выполнения по меткам понимания не добавляет.
Вот вам пример из C#
try{
a=3;
return a;
}
catch{
a=0;
return a;
}
finaly
{
a=5;
}
И вот эта конструкция вполне допустима, но многие молодые программисты споткнутся и не ответят что вернет функция. Причина? неявный goto. Вы привели в пример код с 1 переходом. А если таких переходов 5-10 и они не последовательны. Т.е. один внутри другого, третий сбоку. Любую задачу, которая решается использованием goto можно реализовать циклами, суперпозицией и другими более простыми инструкциями. Вопрос - зачем использовать goto? Приведите пример, в котором код на goto выглядит проще и очевиднее чем циклы и прочее - используйте goto. В других случаях применение goto не оправдан и кроме недоумения, при анализе кода, не вызывает ничего.