Оператор go to имеет тенденцию усложнять понимание программы. Я не помню, чтобы я использовал его в течение последних десяти лет, за исключением Visual Basic 6 в сочетании с «по ошибке».
Насколько я могу судить, вы пользуетесь программой go to, потому что ход программы очень ясен. Я не думаю, что использование try ... catch могло бы значительно улучшить ситуацию, потому что вам нужно было бы выдавать исключения в тех местах, где сейчас идут переходы.
Форматирование, однако, не очень привлекательно: -)
Я бы поменял название метки перехода на другое, потому что это местоположение также достигается, когда все успешно. clean_up: было бы неплохо.