panic(v) останавливает обычное выполнение и раскручивает стек с вызовом отложенных функций. recover() вызывается только внутри defer и возвращает аргумент panic (или nil). Восстановление после panic - только в том же горутине. После recover выполнение продолжается после defer.