В Go нет исключений, все ошибки обрабатываются в штатном режиме. Паника случается лишь из-за ошибки программиста, например nil разыменован или не проверили границы массива.
Как правило код, отвечающий за чистое завершение прост и не может выкинуть панику. Checked предназначен чтобы накрыть собой всё, так как-где то в глубине, при вызове 3rd party пакета, который вызовет другой 3rd party пакет, может произойти panic из-за чьей-то криворукости.
В реальном мире паника встречается редко, а обработка ошибок в подавляющем большинстве случаев это log.Println или log.Fatalln, не считая проброса ошибки наверх — return err.
Организация «чистого» завершения приложений на Go