Потому, что сложно читать и дебажить так как ваш код выполняется в хрен знает какой последовательности. Ваш метод на 6 строк, как пример - так себе. Если метод на 300-400, и этих goto штук 15? Не запуская код с таймером, выпишите на бумажку что будет выведено на экран в
таком примере (там всего 50 строк).
Код с goto пишется один раз, а дальше выбрасывается.
З.Ы. Конкретно ваш пример стоит делать в цикле и рекурсия вам тут тоже не нужна.
func () (id string) {
for id = generateString(32); unique(id); id = generateString(32) {
}
return id
}