Например в цикле мы можем для каждого файла вызывать функцию обработки одного файла, которая внутри себя будет ловить панику, на основании которой возвращать err или что-то нормальное.
Т.е. разделяем ответственность функций, грубо говоря - функция обхода файла получает на вход путь к файлу и номер строки, с которой начинать, через панику возвращаем значение иттерируемой переменной (если это возможно), или через замыкание из main как то отслеживаем(над этим еще подумаю), ловим панику восстановлением, возвращаем функции номер следующей строки и тот же путь. Таким образом продолжаем выполнение функции в условиях поставленной учебной задачи.
И еще небольшой вопрос.
В функции, для работы над строками файлов, используется пакет bufio, файл загружается в Scanner, обход по строкам Scan(), приведение к строке Text(). Вывод тоже буферизированный, вывод с дополнительными пояснениями к полям файла собирается в Builder и выгружается String, записываясь в другой файл. Вопрос - в случае паники, выгружается ли из памяти та функция с кучей буферов, которая аварийно завершилась? Будут ли проблемы с памятью в этом случае?